【Spring】IOC

spring是一个轻量级的框架,以 IoC(控制反转)和 AOP(面向切面编程)为内核。其实DI(依赖注入)是IoC的实现方法

一、IOC

1、概念

Spring中的对象都是由IOC容器进行管理,不需要通过new来创建对象,他通过XML文件或者注解来实例化对象

BeanFactory容器

BeanFactory是IOC容器之一,是管理Bean的工厂,它主要用于初始化Bean

Resource resource = new ClassPathResource("applicationContext.xml"); 
BeanFactory factory = new XmlBeanFactory(resource);  
ApplicationContext容器

ApplicationContext继承BeanFactory,在BeanFactory基础上增加了一些功能,例如AOP、国际化、实践支持等。
ApplicationContext有两个常用的实现类

  • ClassPathXmlApplicationContext:该类从xml文件中加载已经被定义的bean,需要提供完整的xml文件路径
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);
  • FileSystemXmlApplicationContext:该类从xml文件中加载已经被定义的bean,不需要提供完整路径,只需正确配置 CLASSPATH 环境变量即可。
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);
两个容器的区别:

1、如果我们的bean存在问题,例如某个属性没有注入,那么ApplicationContext会立马报错,有利于我们检查错误,而BeanFactory会启动报错
2、ApplicationContext加载bean是一次性全部初始化,而Beanfactory是用到的时候再初始化
3、由于ApplicationContext一次性全部初始化,所以在启动是时候会慢一些,但是对于后期的使用则没有任何性能影响

2、依赖注入

Spring容器将被依赖对象赋值给被调用者的成员变量,相当于为调用者注入了他所依赖的实例
如案例所示:
实体类如下:

public class User {
    private String userId;
    private String userName;
    public User(){
    }
    public User(String userId,String userName){
        this.userId = userId;
        this.userName = userName;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
}
构造注入(实体类必须要有构造函数)

xml文件如下:

	<!--id相当于我们new出来的对象,class对应的实体类-->
    <bean id="user" class="com.qwe.pojo.User">
        <!--name:属性名,value:赋值-->
        <constructor-arg name="userId" value="1001"/>
        <constructor-arg name="userName" value="张三"/>
    </bean>
setter方法注入(实体类必须有set方法)

xml文件配置如下:

<!--id相当于我们new出来的对象,class对应的实体类-->
    <bean id="user" class="com.qwe.pojo.User">
        <!--name:属性名,value:赋值-->
        <property name="userId" value="1001"/>
        <property name="userName" value="张三"/>
    </bean>
p命名空间注入
<bean id="user" class="com.qwe.pojo.User" p:userId="1001" p:userName="张三"/>
c命名空间注入
<bean id="user" class="com.qwe.pojo.User" c:userId="1001" c:userName="张三"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值