1、创建对象的注解
@Component
用于声明Bean对象的注解,在类上添加该注解后,表示将该类创建对象的权限交给Spring容器。可以直接将这些类直接创建,使用的时候可以直接用。
注解的value属性用于指定bean的id值,value可以省略,省略则默认id为类名首字母小写。
其它的,跟此注解用法是一样的,只不过用的地方不同
@Repository : 用于Dao实现类的注解
@Serivce : 用于Service实现类的注解
@Controller : 用与Controller实现类的注解
2、包扫描
需要再Spring配置组件扫描器,用于爱指定的基本包中扫描注解。
如果没有包扫描,添加的创建对象的注解则不生效。
红框内的是需要添加的内容。
可以使用context:component-scan指定不同的包路径
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- spring容器启动的时候需要加载配置文件,注解方式实现ioc的时候,明确通知spring那些包要扫描
:指定的包以及子包中所有添加了component注解的类都会由spring容器来管理-->
<!--扫描多个包的方式1-->
<context:component-scan base-package="com.AE.dao"/>
<context:component-scan base-package="com.AE.service"/>
<context:component-scan base-package="com.AE.controller"/>
<!--扫描多个包的方式2: 多个包都妨碍一个base-package中,多个包可以用逗号分号空格分隔,但是不推荐空格-->
<context:component-scan base-package="com.AE.dao,com.AE.service,com.AE.controller"/>
<!--扫描多个包的方式3: 直接添加父包-->
<context:component-scan base-package="com.AE"/>
</beans>
3、属性注入 @Value
在属性上使用注解@Value,该注解的value属性用于指定要注入的值。使用该注解完成属性注入是,类中无需setter。当然,若属性有setter,则也可将其加到setter上。
4、自动注入
4.1、byType自动注入@Autowired
需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装配Bean的方式。使用该注解完成属性注入时,类中无需setter。当然,若属性有setter,则也可以加到setter上。
如下图,这种类的引用,可以通过该注解自动注入。通过类型查找注入。
4.2、byName自动注入@Autowired和@Qualifier
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。类中无需 set 方法,也可加到 set 方法上。
@Autowired 还有一个属性 required,默认值为 true,表示当匹配失败后,会终止程序运行。若将其值设置为 false,则匹配失败,将被忽略,未匹配的属性值为 null。
如下
4.3、自动注入@Resource
这个跟之前的注解区别就是,这个注解是jdk1.6以上实现支持的。
1、byType注入引用类型属性
如果不带任何参数,则默认按名称的方式注入,按名称不能注入,则会按照类型进行bean的匹配注入。
2、byName注入引用类型属性
@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹配的 Bean 的 id。