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(多例)
  • 相关阅读:
    Unique Binary Search Trees——LeetCode
    Binary Tree Inorder Traversal ——LeetCode
    Maximum Product Subarray——LeetCode
    Remove Linked List Elements——LeetCode
    Maximum Subarray——LeetCode
    Validate Binary Search Tree——LeetCode
    Swap Nodes in Pairs——LeetCode
    Find Minimum in Rotated Sorted Array——LeetCode
    Linked List Cycle——LeetCode
    VR AR MR
  • 原文地址:https://www.cnblogs.com/CodeJames/p/12717374.html
Copyright © 2011-2022 走看看