注解
@Component
@Repository
:用于对DAO实现类进行标注
@Service
:用于对Service实现类进行标注
@Controller
:用于对Controller实现类进行标注
@Scope
:指定Bean的作用范围
@PostConstruct
:相当于init-method,可以在一个Bean中定义多个
@PreDestroy
:相当于destroy-method,可以在一个Bean中定义多个
@Autowired
:按类型注入
@Resource
:按名称注入
@Inject
:跟@Autowired类似,只不过没有required属性
@Lazy
:设置懒加载
扫描注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <context:component-scan base-package="" /> 指定路径,扫描该基路径里所有类的注解信息。
<context:component-scan base-package="com.wetts" resource-pattern="anno/*.class" /> 扫描特定的类而非基路径下的所有类。 默认情况下resource-pattern属性的值为“**/*.class”,即基类包里的所有类。
<context:component-scan base-package="" /> <context:include-filter type="regex" expression="" /> <context:exclude-filter type="aspecj" expression="" /> </context:component-scan> <context:include-filter>表示要包含的目标类,<context:exclude-filter>表示要排除在外的目标类。 <context:component-scan>下可以拥有若干个<context:include-filter>和<context:exclude-filter>元素。 这两个过滤元素均支持多种类型的过滤表达式: annotation 示例:com.wetts.XxxAnnotation 所有标注了XxxAnnotation的类。该类型采用目标类是否标注了某个注解进行过滤。 assignable 示例:com.wetts.XxxService 所有继承或扩展了XxxService的类。该类型采用目标类是否继承或扩展某个特定类进行过滤。 aspectj 示例:com.wetts..*Service+ 所有类名以Service结束的类及继承或扩展它们的类。 regex 示例:com\.wetts\.anno\..* 所有com.wetts.anno类包下的类。该类型采用正则表达式根据目标类的类名进行过滤。 custom 示例:com.wetts.XxxTypeFilter 采用XxxTypeFile通过代码的方式根据过滤规则。该类必须实现org.springframework.core.type.TypeFilter接口。
|
@Autowired
和@Resource
@Autowired
默认按类型匹配的方式,在容器中查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入到@Autowired标注的变量。
可以对类成员变量及方法的入参进行标注。
1 2
| @Autowired public void init(@Qualifier("userDao")UserDao userDao, LogDao logDao) {}
|
如果容器中没有一个和标注变量类型匹配的Bean,Spring容器启动时将报NoSuchBeanDefinitionException异常。如果希望Spring即使找不到匹配的Bean完成注入也不要抛出异常,那么可以使用@Autowired(required=false)进行标注。默认为true。
如果容器中有一个以上匹配的Bean时,则可以通过@Qualifier注解限定Bean的名称。
如果对类中集合的变量或方法入参进行@Autowired标注,Spring会将容器中类型匹配的所有Bean都自动注入进来。
1 2
| @Autowired(required=false) private List<Plugin> plugins;
|
@Resource
要求提供一个Bean名称的属性,如果属性为空,则自动采用标注处的变量名或方法名作为Bean的名称。