组件扫描:Spring容器启动之后会检查某个包以及子包下面所有的类。如果类前面有特定的注解(比如@Component),则容器会将该类纳入容器进行管理。(使用注解的方式使我们无需在XML中配置一个Bean引用,相当于配置了一个Bean元素)
注解配置默认情况下在Spring中是关闭的,我们需要在配置为文件中使用<context:annotation-config/>激活它。
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
</beans>
一旦激活注解配置后,我们就可以在代码中使用注解来进行依赖注入。其中下面是几个重要的注解:
@Required:注解应用于bean属性的setter方法。
@Autowired:注解可以应用到bean属性的setter方法,非setter方法,构造函数和属性
@Qualifier,通过指定确切的将被引用的bean,@Autowired和@Qualifier注解可以用来删除混乱
删除spring配置文件中的原有对象bean的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 需要一个数据源对象 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/userdb?characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- 创建SQL的执行对象 -->
<bean id="qr" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
<!-- 构造函数创建对象 -->
<constructor-arg name="ds" ref="dataSource" />
</bean>
</beans>
IOC与DI的注解配置
注解存在的意义 : XML的另外一种配置方案而已,它能够减少我们在XML中配置的bean标签的数量,从而简化XML配置
主要用途 : 配置bean
@Component = <bean id="" class="" />
@Component("userDAO") = <bean id="userDAO" class="com.hnxy.dao.impl.UserDAOImpl" />
最起码注解的好处就是 你不用再指定类型
但是 此处需要注意的是,你的bean虽然创建完了 但是它被创建在类中了 spring配置文件并不知道你有这个bean
所以我们必须让spring知道我们现在有一个bean在UserDAOImpl
那么我们怎么让spring配置文件知道我有这么一个bean
其实 spring给你提供了一个 注解bean的包扫描器的功能可以通过配置包扫描器 扫描某个包下的所有注解bean
那么此处我们怎么配置注解bean的包扫描器呢?
引入相关的功能 这个包扫描器的功能 在spring-context这个包下,所以我们要引入
这个context功能
声明引入功能标签