基于Annotation(注解)的装配

一、常用注解

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应用生效)

 

posted @ 2019-06-27 14:54  想看云飞却没风~  阅读(919)  评论(0编辑  收藏  举报