Spring框架中的IOC容器(一)

*一、IOC接口(BeanFactory)

**
1、IOC思想基于IOC容器,IOC容器底层就是对象工厂
2、Spring提供IOC容器实现两种方式(两个接口)
(1)BeanFactory
IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用
加载配置文件时不会创建对象,在获取对象(使用)才去创建对象
(2)ApplicationContext
BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用
加载配置文件时就会把配置文件对象进行创建
3、ApplicationContext接口的实现类
在这里插入图片描述

二、IOC操作Bean管理(基于xml)

1、基于XML创建对象

<!--<配置User对象创建>-->
<bean id="user" class="com.study.user.User"></bean>
常用的属性:
id属性:唯一标识
class属性:类全路径(包类路径)

2、注入属性的两种方式

  • 第一种方式:使用set方法注入
/**
 * 演示进行依赖注入的方式
 */
public class Book {
    //创建属性
    private String bName;
    private String bAuthor;
    //set注入
    public void setbName(String bName) {
        this.bName = bName;
    }
    public void setbAuthor(String bAuthor) {
        this.bAuthor = bAuthor;
    }
}
  • 第二种方式:使用有参数的构造函数注入
    ①、创建类、定义属性,同时定义有属性值的构造函数
/**
*演示依赖注入的方式
*/
public class Order {
    private String oName;
    private String address;
    //使用有参数的构造函数进行属性注入
    public Order(String oName, String address) {
        this.oName = oName;
        this.address = address;
    }
}

②、编写xml文件,并在其中配置属性值

<bean id="order" class="com.study.order.Order">
    <constructor-arg name="oName" value="Water"></constructor-arg>
    <constructor-arg name="address" value="China"></constructor-arg>
</bean>

三、操作Bean管理(基于注解)

1、注入属性-外部Bean
①、创建两个类UserService类和UserDao类
②、在UserService调用UserDao里面的方法
③、在Spring的配置文件中进行配置

public class UserService {
    //创建UserDao类型属性值,生成set方法
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void add(){
        System.out.println("service add......");
        //在service中调用dao中的方法
        userDao.update();
    }
}

bean.xml:

<!--<1、将service和da对象进行创建>-->
<bean id="userService" class="com.study.service.UserService">
    <!--<注入userDao对象>-->
    <property name="userDao" ref="userDao"></property>
</bean>
<bean id="userDao" class="com.study.dao.UserDaoImpl"></bean>

测试程序:

public class TestBean {
    @Test
    public void testAdd(){
        //1、加载spring配置文件
        ApplicationContext context=new
                ClassPathXmlApplicationContext("bean.xml");
        //2、获取配置创建的对象
        UserService userService=context.getBean("userService", UserService.class);
        System.out.println(userService);
        userService.add();
    }
}

2、注入属性-内部Bean
最常见的使用内部bean的情况为一对多的情况

-第一步首先建立两个类,如部门类和员工类(表现为一对多的关系)

//Department类*(部门)
public class Dept {
    private String dName;
    public void setdName(String dName) {
        this.dName = dName;
    }
    @Override
    public String toString() {
        return "Dept{" +
            "dName='" + dName + '\'' +
            '}';
}
}
//Emplement类(员工)
public class Emp {
    private String eName;
    private String gender;
    //员工属于某个部门,使用对象形式表示
    private Dept dept;
    public void setDept(Dept dept) {
        this.dept = dept;
    }
    public void seteName(String eName) {
        this.eName = eName;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public void print(){
        System.out.println(eName+"::"+gender+"::"+dept);
}
}
  • 在配置文件中进行内部bean的配置:
<!--<内部bean>-->
<bean id="emp" class="com.study.bean.Emp">
    <!--<设置两个普通属性>-->
    <property name="eName" value="lucy"></property>
    <property name="gender" value="女"></property>
    <!--<设置对象类型属性>-->
    <property name="dept">
        <bean id="dept" class="com.study.bean.Dept">
            <property name="dName" value="安保部"></property>
        </bean>
    </property>
</bean>
  • 第三步,编写测试方法
@Test
public void testBean3(){
    //1、加载spring配置文件
    ApplicationContext context=
            new ClassPathXmlApplicationContext("bean.xml");
    //2、获取配置,创建对象
    Emp emp=context.getBean("emp",Emp.class);
    System.out.println(emp);
    emp.print();
}

3、注入属性-级联赋值

  • 上面的部门类和员工类不做任何改变,只需修改xml文件和测试程序即可实现。
    bean.xml:
<!--<级联赋值>-->
<bean id="emp" class="com.study.bean.Emp">
    <property name="eName" value="luck"></property>
    <property name="gender" value="男"></property>
    <!--<级联赋值>-->
    <property name="dept" ref="dept"></property>
</bean>
<bean id="dept" class="com.study.bean.Dept">
    <property name="dName" value="财务部"></property>
</bean>

测试程序:

@Test
public void testBean3_1(){
    ApplicationContext context=
            new ClassPathXmlApplicationContext("bean.xml");
    Emp emp=context.getBean("emp",Emp.class);
    System.out.println(emp);
    emp.print();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值