SpringIOC

本文详细介绍了Spring框架中的InversionofControl(IOC)和依赖注入(DI)概念,包括XML配置、注解的使用以及从XML到JavaConfig的迁移,重点讲解了如何通过配置文件和注解来管理和解耦项目组件。

一、SpringIOC理解


        关键字:IOC名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系
IOC( Inversion of Control,中文释义:控制反转  ) 是Spring框架的核心思想之一,主要用于解耦。IOC是指将创建对象的控制权转移给Spring框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦;

  •   控制 :指的是对象创建(实例化、管理)的权力
  •   反转 :控制权交给外部环境(Spring框架、IoC容器)

二、xml核心配置文件

2.5版本前====>xml

SpringDI(依赖注入)
        DI(Dependecy Inject,中文释义:依赖注入) 是对IOC概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean对象。(例如在MyBatis整合Spring时,SqlSessionFactoryBean 依赖IOC容器注入一个 DataSource数据源bean);

DI实现方式:

  1. set注入=通过set方法维护对象之间的依赖关系
  2. 构造注入=通过构造方法维护对象之间的依赖关系
  3. 属性注入(不推荐)

DI注入的数据类型:

  1. 注入对象
  2. 注入基本类型与String
  3. 复杂类型list arry set map properties

set注入DI实现步骤:
1. 思考
2. 给属性提供set方法
3. 在bean标签内部开启配置
     配置位置:<bean>此位置</bean>
     配置语法:<property 属性名="属性值"></property>
     配置属性:
         name======》属性名称
         value=====》属性值
         ref=======》属性值的引用

 三、xml+注解


2.5版本后====>annonation+xml


替换:

    <bean id="" class="" init-method="" destroy-method="" scope="" autowire="">
        <property></property>
        <constructor-arg></constructor-arg>
    </bean>


   一、注入类


        @Component
            含义:将注解所修饰的类注入spring容器
            位置:类
            语法:@Component(value = "id")
                 如果省略value="id"默认注入的id为类的名称且首字母小写
            注意:  不可以单独使用<context:component-scan base-package=""></context:component-scan>

        @Repository 注入数据访问层
        @Service    注入业务层
        @Controller 注入控制层
            以上三个注解与@Component功能语法一致

    二.注入数据


        @Value()
            含义:向属性注入基本类型与String
            语法:@Value("数据")
                 @Value("${key}")
            位置:属性
            注意:不能单独使用
                <context:property-placeholder location=""></context:property-placeholder>
        @Autowired()
            替换:自动装配属性
            位置:属性
            含义:通过“set”方法【set方法可以省略】,按照“类型”自动装配,如果类型冲突则按照"名称"装配
            注意:
                1.按类型装配如果冲突切换为名称装配
                2.按类型装配如果冲突切换为名称装配,如果名称也没有则会抛异常
                    NoUniqueBeanDefinitionException
                3.按类型装配没一个匹配
                    NoSuchBeanDefinitionException

  四、纯注解


3.0版本后====>annonation+javaConfig配置类


        @Configuration
            含义:配置类
            注意:AnnotationConfigApplicationContext
        @ComponentScan
            替换:<context:component-scan base-package=""></context:component-scan>
        @PropertySource()
            替换:<context:property-placeholder location=""></context:property-placeholder>
        @Import()
            含义:导入其他配置类
        @Bean
            含义:注入类;方法返回值为class 方法名称为id
            位置:修饰方法
            注意:单独使用无需扫描

五、其他注解


      @Primary
            含义:在类型装配冲突的情况下,此注解所修饰的类作为首选项
            位置:类
            注意:不能单独用
        @Qualifier
            含义:按照名称装配
            位置:属性
            注意:不能单独用
        @Resource
            含义:按照名称装配
            位置:属性
            注意:单独用
        @Scope
            含义:作用域
            位置:类
            注意:不能单独用
            举例:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
        @PreDestroy
            含义:替换destory-method
            位置:方法
            注意:单独用
        @PostConstruct
            含义:替换init-method
            位置:方法
            注意:单独用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值