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(多例)
原文地址:https://www.cnblogs.com/CodeJames/p/12717374.html