zoukankan      html  css  js  c++  java
  • springioc

    概念

    Spring IOC(Inversion of Control):控制反转;在传统的程序设计过程中,当一个程序需要调用另外一个程序来完成功能的时候,通常是调用者来创建被调用者的实例,虽然这样很简单也很好理解,但是程序间的耦合性很高,会导致程序越来越臃肿。在Spring中创建被调用者不再是调用者自己来完成,而是利用java的反射机制,通过配置文件或注解来创建实例,因此被称为控制反转。其中创建被调用者的工作由Spring来完成,注入调用者被称为依赖注入。

    注入方式

    1.使用构造方法提供

    • 这种注入方式,调用者需要有默认的构造函数

    • xml

      <bean id="" class="调用者路径"  >
            属性  
            <constructor-arg name="" value="被调用者路径"></constructor-arg>
      </bean>
      

    2.使用set方法提供

    • 需要在调用者中有被调用者的set方法,如:

      private IAccountDao accountDao;
      public void setAccountDao(IAccountDao accountDao) {
              this.accountDao = accountDao;
          }
      
    • set方法注入

      <bean id ="" class "调用者路径">
      	<property name="" value="被调用者路径"></property>
      </bean>
      

    3.注解注入

    • 在xml中只需配置Spring创建容器时要扫描的包

      <context:componet-scan base-packge=""></context:componet-scan>
      

    创建bean的三种方式

    1.使用默认函数

    <bean id="" class=""></bean>
    

    2.使用普通工厂的方法

    当我们想调用的类存在于jar包中,无法通过修改源码的方式来提供默认构造函数,此时可以利用一个工厂类。

    public class InstanceFactory {
        public IAccountService   getAccountService(){
            return new AccountServiceImpl();
        }
    }
    
    xml配置
    <bean id = "instanceFactory" class = "工厂类路径"></bean>
    <bean id ="" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
    

    3.使用静态工厂中的静态方法

    public class StaticFactory {
        //方法名与xml配置文件中的要一致
        public static IAccountService getAccountService() {
            return new AccountServiceImpl();
        }
    }
    
    <bean id="" class="工厂类的路径" factory-method="getAccountService"></bean>
    

    能注入的数据有三类

    1.基本类型和String

    <bean id="" class="com.xwj.service.impl.AccountServiceImpl2">
            <property name="name" value="Test"></property>
            <property name="age" value="19"></property>
    </bean>
    

    2.其他bean类型(在配置过程中或注解配置过的bean)

    <bean id="" class="com.xwj.service.impl.AccountServiceImpl2">
            <property name="birthday" ref="now"></property>
    </bean>
    

    3.复杂类型和集合类型

    <bean id="accountService3" class="com.xwj.service.impl.AccountServiceImpl3">
        	
            <property name="myStrs" >
                <array>
                    <value>AAA</value>
                    <value>BB</value>
                    <value>C</value>
                </array>
            </property>
    
            <property name="myList" >
                <list>
                    <value>AAA</value>
                    <value>BB</value>
                    <value>C</value>
                </list>
            </property>
    
            <property name="mySet" >
                <set>
                    <value>AAA</value>
                    <value>BB</value>
                    <value>C</value>
                </set>
            </property>
    
            <property name="myMap" >
                <map>
                    <entry key="testA" value="AAA"></entry>
                </map>
            </property>
    
            <property name="myPros" >
                <props>
                    <prop key="testA">ccc</prop>
                    <prop key="testB">bbb</prop>
                </props>
            </property>
    </bean>
    

    使用注解注入常见的注解

    1.@Component(value="指定id")

    • 作用:把当前类对象存入到Spring容器中。
    • 常见的继承类有@Service,@Controller,@Repository

    2.用于注入数据:

    • Autowired
      • 作用:自动按照类型注入,当容器中有唯一的bean对象类型和要注入的变量类型匹配,就可以注入成功。
      • 出现的位置:变量、方法
    • @Qualifier
      • 作用:在按照类型注入的基础上,在按照名称注入,不能单独给类成员实现注入,但可以给方法参数实现注入
      • 属性:value:用于指定注入bean的id
    • @Resource
      • 作用:直接按照bean的id注入,可以单独使用
      • 属性:name:用于指定bean的id
    • 以上的三个注解只能对其他的bean类型实现注入,基本类型和String无法使用上述注解实现注入,复杂类型和集合类型必须使用XML实现
    • @Value
      • 作用:用于注入基本类型和String类型的数据
      • 属性:value:用于指定数据的值
    • @Scope
      • 作用:用于指定bean的作用范围
      • 属性:value :singleton(单例),prototype(多例)
  • 相关阅读:
    Linux内核分析作业六
    课本第三章读书笔记
    课本第十八章读书笔记
    Linux内核分析作业五
    课本第五章读书笔记
    MSF MS11-050/10-087/Adobe攻击实践及内存保护技术
    Linux课题实践五——字符集总结与分析
    Linux课题实践四——ELF文件格式分析
    Linux课题实践三——程序破解
    实践二——内核模块
  • 原文地址:https://www.cnblogs.com/CodeJames/p/12717374.html
Copyright © 2011-2022 走看看