Spring依赖注入DI

Spring依赖注入DI

  • 1.能注入的数据类型
  • 2.注入方式
    • 2.1 构造方法注入
    • 2.2 setter方法注入
      • 2.2.1 普通类型和引用类型
      • 2.2.2 注入集合类型
    • 2.3 使用注解注入
      • 2.3.1 @Component
      • 2.3.2 用于注入数据
        • @Autowired
        • @Qualifier
        • @Resource
        • @Value
      • 2.3.3 和生命周期相关
      • 2.3.4 用于改变作用域

1.能注入的数据类型

a.基本类型和String
b.其他bean类型
c.复杂类型/集合类型

2.注入方式

2.1 构造方法注入

里面加入
标签里的属性:

type:指定注入数据类型
index:注入数据位置,从0开始
name:给构造函数指定名称的参数
value:用于提供基本类型和String类型的数据的值
ref:用于指定其他bean类型数据,就是在Spring的Ioc核心容器中出现过的bean对象

如:配置一个String类型变量s:

<bean id="s" class="java.lang.String">
    <constructor-arg ref="s"/>
</bean>

2.2 setter方法注入

2.2.1 普通类型和引用类型

<!--
setter方法注入普通数据  <property name=" " value="值">
* 引用数据             <property name="" ref="另一个bean">
->

  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
    <property name="jdbcUrl" value="jdbc:sqlserver://localhost:1433;DatabaseName=user"/>
    <property name="user" value="asd"/>
    <property name="password" value="123"/>
</bean>

2.2.2 注入集合类型

<!-- 
        集合的注入都是给<property>添加子标签
            数组:<array>
            List:<list>
            Set:<set>
            Map:<map> ,map存放k/v 键值对,使用<entry>描述
            Properties:<props>  <prop key=""></prop>
            
        普通数据:<value>
        引用数据:<ref>
    -->
<bean id="collectionDataId" class="com.collectionData" >
    <property name="arrayData">
        <array>
            <value>a</value>
            <value>b</value>
        </array>
    </property>

    <property name="listData">
        <list>
            <value></value>
            <value></value>
        </list>
    </property>

    <property name="setData">
        <set>
            <value>one</value>
            <value>two</value>
        </set>
    </property>

    <property name="mapData">
        <map>
            <entry key="name" value="xiaohua"></entry>
            <entry key="age" value="12"></entry>
        </map>
    </property>

    <property name="propsData">
        <props>
            <prop key="1">a</prop>
            <prop key="2">b</prop>
            <prop key="3">c</prop>
        </props>
    </property>
</bean>

注意:结构相同,标签是可以互换的
用于给List结构集合注入的标签:list,array,set
用于给Map结构集合注入的标签:map,props

2.3 使用注解注入

使用注解的前提是告知spring创建容器时要扫描的包,配置所需要的标签不是在bean约束,而是一个名称为context名称空间和约束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>
    <!--组件扫描,扫描含有注解的类 -->
    <context:component-scan base-package="com.lby"/>

</beans>

2.3.1 @Component

1.作用:用于把当前类存入spring容器, @Component(“id”)相当于
2.属性
value:用于指定bean的id,当我们不写时默认值是当前类名,且首字母改成小写

3.web开发,提供3个@Component注解衍生注解(功能一样)取代

   @Repository:dao层

   @Service:service层

   @Controller:web层

2.3.2 用于注入数据

在使用注解时set方法不是必须的

@Autowired

a. 作用:自动按照类型注入,只要容器中有唯一的一个bean对象类型和要驻入的变量类型匹配,就可以注入成功
b. 出现位置:可以是变量上,也可以是方法上

@Qualifier

a.作用:在按照类中注入的基础上再按照名称注入,它在给类成员注入时不能单独使用(需要和Autowired一起使用),但在给方法参数注入时可以
b.属性
value:用于指定bean的id

@Resource

a.作用:按照bean注入bean,可以独立使用
b.属性
name:用于指定bean的id

以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现
另外,集合类型的注入只能通过XML实现

@Value

a.作用:用于实现基本类型和String类型的注入
b.属性
value:指定数据的值,可以使用el表达式

@Service(value = "accountService")

public class AccountServiceImpl implements IAccountService {
    @Resource(name = "accountDao")
    private IAccountDao accountDao = null;


    public void saveAccount() {
        accountDao.saveAccount();
    }
}
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.user}")
private String user;
@Value("${jdbc.driverClass}")
private String driverClass;
@Value("${jdbc.jdbcUrl}")
private String jdbcUrl;
@Autowired
private QueryRunner runner;
   普通值:@Value("")

   引用值:

          方式1:按照【类型】注入

                 @Autowired

          方式2:按照【名称】注入1

                 @Autowired

                 @Qualifier("名称")

          方式3:按照【名称】注入2

                 @Resource("名称")

2.3.3 和生命周期相关

和bean中的init-method和destory-method作用一样

   初始化:@PostConstruct

   销毁:@PreDestroy

2.3.4 用于改变作用域

和bean标签中使用scope属性实现的功能一致
scope:
作用:用于指定bean的作用范围
属性:
value:指定范围的取值(prototype(多例),singleton(单例))

   @Scope("prototype")

你可能感兴趣的:(Spring依赖注入DI)