IOC操作Bean(基于Xml)

Bean管理

  1. Spring创建对象;
  2. Spring注入属性

1. 创建对象

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="hello" class="com.yang.pojo.Hello"></bean>

</beans>
  • id为创建的对象名,class为对应的类
  • 注意:默认通过无参构造创建对象(反射)

2. 注入属性方式

2.1 基于set方法注入属性

property标签通过set方法注入属性

<bean id="hello" class="com.yang.pojo.Hello">
    <property name="str" value="helloWorld"/>
</bean>
  • name为键,value为值

2.2 基于有参构造注入属性

constructor-arg通过有参构造器注入属性

<bean id="hello" class="com.yang.pojo.Hello">
    <constructor-arg name="str" value="helloWorld2"/>
</bean>

2.3 基于p命名空间注入属性

  1. 命名空间加上p

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd"
           xmlns:p="http://www.springframework.org/schema/p">
    
  2. 注入属性

    <bean id="hello" class="com.yang.pojo.Hello" p:str="helloWorld3"/>
    

3. 注入不同属性

3.1 注入空值和特殊符号

  1. 注入空值

    使用null标签

    <bean id="hello" class="com.yang.pojo.Hello">
        <property name="str">
            <null></null>
        </property>
    </bean>
    
  2. 特殊符号

    使用<![CDATA[]]>标记

    <bean id="hello" class="com.yang.pojo.Hello">
        <property name="str">
            <value><![CDATA[<<<helloWorld>>>]]></value>
        </property>
    </bean>
    

3.2 外部bean注入属性

  1. User实体类

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
        private String id;
        private String userName;
        private Integer gender;
    }
    
  2. UserDao

    public interface UserDao {
        public User getUser();
    }
    
  3. UserDaoImpl

    public class UserDaoImpl implements UserDao {
    
        public User getUser(){
            User user = new User();
            user.setId("1");
            user.setUserName("yang");
            user.setGender(1);
            return user;
        }
    
    }
    
  4. UserService

    public class UserService {
        private UserDao userDao;
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    
        public User getUser(){
            User user = userDao.getUser();
            System.out.println(user);
            return user;
        }
    
    }
    
  5. test

    @Test
    public void userServiceTest(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        UserService userService = context.getBean("userService", UserService.class);
        userService.getUser();
    }
    

3.3 内部bean注入属性

其他部分同上,仅仅改变了bean注入的方式

<bean id="userService" class="com.yang.service.UserService">
    <property name="userDao">
        <bean id="userDaoImpl" class="com.yang.dao.UserDaoImpl"></bean>
    </property>
</bean>

3.4 集合属性注入

<bean id="user" class="com.yang.pojo.User">
    <property name="userName" value="yang"/>
    <property name="gender" value="1"/>
    <property name="id" value="1"/>
    <property name="courses">
        <list>
            <value>语文</value>
            <value>数学</value>
            <value>英语</value>
        </list>
    </property>
    <property name="friends">
        <set>
            <value>zs</value>
            <value>ls</value>
            <value>ww</value>
        </set>
    </property>
    <property name="grades">
        <map>
            <entry key="语文" value="95"></entry>
            <entry key="数学" value="95"></entry>
            <entry key="英语" value="95"></entry>
        </map>
    </property>
</bean>

另一种方法

  1. 引入util命名空间

    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation=
    http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
    
  2. 使用util:list…

    <util:list id="courseList">
        <value>语文</value>
        <value>数学</value>
        <value>英语</value>
    </util:list>
    

4. 自动装配

根据匹配的属性或者名称进行自动装配

4.1 根据名称

<util:list id="courses">
    <value>语文</value>
    <value>数学</value>
    <value>英语</value>
</util:list>

<bean id="user" class="com.yang.pojo.User" autowire="byName">
</bean>

image-20210201203702444

4.2 根据类型

<util:list id="courses">
    <value>语文</value>
    <value>数学</value>
    <value>英语</value>
</util:list>

<bean id="user" class="com.yang.pojo.User" autowire="byType">
</bean>

image-20210201203732770

注意:当一个类有多个对象时,不能使用byType进行自动装配

5. 外部配置文件引入

  1. context命名空间引入

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    
  2. 引入配置文件

    <context:property-placeholder location="classpath:db.properties"/>
    
  3. 配置druid连接池

    <bean id="dataSource"
          class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
          destroy-method="close">
        
        <property name="driverClassName"
                  value="${driver}" />
        <property name="url" value="${url}" />
    
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
    
    </bean>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值