一、常用注解
1.@Component
是一种通用注解,可用于任何Bean
2.@Repository
通常用于注解DAO层类,即持久层
3.@Service
通常用于注解Service类,即服务层
4.@Controller
通常用于Controller类,即控制层(MVC)
5.@Autowired
用于注解Bean的属性变量、属性的set()方法和构造函数,默认按照Bean的类型进行装配
默认情况下,找不到合适的Bean会导致autowired失败抛出异常,可通过设置@Autowired的required属性为false避免,每个类只能有一个构造器被标记为required=true。
可以通过添加注解给需要某种类型的数组的字段或方法,以提供ApplicationContext中所有该类型的Bean,让数组中的元素有序可通过@Order注解,也可以用于装配key为String的Map。
6.@Resource
作用与@Autowired一样,区别在于默认按照Bean的实例名称进行装配
二、类的自动检测和Bean的注册
1.配置applicationContext
对特定包(com.yh)中的所有类进行组件扫描,将含有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" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <context:component-scan base-package="com.yh"></context:component-scan> </beans>
<context:component-scan>包含<context:annotation-config>,通常使用前者后不再使用后者。
在扫描并注册类时,,可以使用过滤器来进行自定义扫描
2.定义Bean
扫描过程中组件被自动检测,Bean名称是由BeanNameGenerator生成的,注解都有一个name属性用于显示设置Bean的名称。
默认命名策略:将类名的首字母小写作为Bean的名称。
也可以自定义命名策略,实现BeanNameGenerator接口,并一定要包含一个无参构造器。
<context:component-scan base-package="com.yh" name-generator="com.yh.MyNameGenerator"> </context:component-scan>
三、Bean的作用域
通过@Scope注解设置,主要取值有:
singleton(单例模式)、prototype(原型模式)、request(每次HTTP请求,使用request定义的Bean都产生新实例,web应用生效)、session(每次HTTP Session,使用session定义的Bean都产生新实例,web应用生效)、globalsession(每个全局的HTTP Session,使用session定义的Bean都产生新实例,web应用生效)