前言:spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理 ,十分方便。
@Component:spring 管理组件的通用形式,可以放在任何类头上,不推荐使用。
@Repository:注解在数据访问层Bean,还可以将数据库操作抛出的原生异常翻译转化为spring的持久层异常。 举例:
-
@Repository(value="goodsDao")注解是告诉Spring,让Spring创建一个名字叫"goodsDao"的GoodsDaoImpl实例。
-
@Repository(value="goodsDao") public class GoodsDaoImpl extends BasicDaoImpl implements GoodsDao { }
-
当Service需要使用Spring创建的名字叫"goodsDao"的GoodsDaoImpl实例时,就可以使用@Resource(name = "goodsDao")注解告诉Spring,Spring会自动把goodsDao创建好然后注入给goodsDao。
-
@Resource(name = "goodsDao") private GoodsDao goodsDao;
@Service:注解在业务逻辑层Bean。
- @Service("goodsService")注解是告诉Spring,让Spring创建一个名字叫"goodsService"的GoodsServiceImpl实例。
-
@Service("goodsService") public class GoodsServiceImpl implements GoodsService { }
- 当Controller需要使用GoodsServiceImpl的的实例时,需要在Controller只需要声明@Resource(name = "goodsService")来接收由Spring注入的"goodsService",然后Spring会自动创建好的"goodsService",然后注入给Controller
-
@Resource(name = "goodsService") private GoodsService goodsService;
@Controller:注解在控制层Bean,也就是是spring-mvc的注解,具有将请求进行转发,重定向的功能。
- 使用@Controller注解标识GoodsController之后,就表示要把GoodsController交给Spring容器管理,在Spring容器中会存在一个名字为"goodsController"的Controller,这个名字是根据GoodsController类名首字母小写来取的(如果@Controller不指定value,则默认bean名称为这个类的类名首字母小写)。
-
@Controller public class GoodsController { }
@Autowired:字面意思为自动装配,用来给指定的字段或方法注入所需的外部资源。
- @Autowired并消除了Java代码里面的getter/setter与bean属性中的property,并且@Autowired默认按类型匹配的方式,在容器查找匹配的Bean,所以bean名称可以任意取,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中,如果有多个匹配的bean就需要用@Qualifier("")来标识不同的bean(下面@Qualifier会介绍)。
-
@Autowired private GoodsService goodsService;
@Qualifier:注入指定bean的名称,有两个匹配的bean及以上会用到,这种情况很少。
-
由于有两个类实现了GoodsService接口,所以Spring不知道应该绑定哪个实现类,这个时候就要用到@Qualifier注解了
-
@Service("service1") public class GoodsServiceImpl1 implements GoodsService { } @Service("service2") public class GoodsServiceImpl2 implements GoodsService { } @Controller public class GoodsController { @Autowired @Qualifier("service1") GoodsService goodsService; }
@Scope :Spring默认产生的bean是单例(即"singleton")的,如果设置为"prototype"表示原型即每次都会new一个新的出来。
-
@Controller @Scope("prototype") public class GoodsController { }
@Resource:用来给指定的字段或方法注入所需的外部资源(和@Autowired一样),默认按名称装配,当找不到与名称匹配的bean才会按类型装配;注意:@Resource非spring注解,而是J2EE的注解,写到这里是因为上面我用了此注解,只是给大家多提供一种选择。
-
@Resource(name = "goodsService") private GoodsService goodsService;