Spring 注解—第一篇—常用使用Bean和注册Bean

一、注解分为两类

1、一类是使用Bean,即是把已经在xml文件中配置好的Bean拿来用,完成属性、方法的组装;比如@Autowired , @Resource,可以通过byTYPE(@Autowired)、byNAME(@Resource)的方式获取Bean

2、一类是注册Bean,@Component , @Repository , @ Controller , @Service , @Configration这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中,等你要用的时候,它会和上面的@Autowired , @Resource配合到一起,把对象、属性、方法完美组装。

 

二、跟bean相关

1、注册bean

★★@Configuration可理解为用spring的时候xml里面的<beans>标签

★★@Bean可理解为用spring的时候xml里面的<bean>标签,@Bean:明确地指示了产生一个bean的方法,并且交给Spring容器管理

@Bean就放在方法上,就是产生一个Bean

Spring Boot不是spring的加强版,所以@Configuration@Bean同样可以用在普通的spring项目中,而不是Spring Boot特有的,只是在spring用的时候,注意加上扫包配置

<context:component-scan base-package="com.xxx.xxx" />,普通的spring项目好多注解都需要扫包,才有用,有时候自己注解用的挺6,但不起效果,就要注意这点。

Spring Boot则不需要,主要你保证你的启动Spring Boot main入口,在这些类的上层包就行

 

★★@Controller 标记一个类是Controller

在SpringMVC 中提供了一个非常简便的定义Controller 的方法,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping @RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。

 

在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。

单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。

这个时候有两种方式可以把MyController 交给Spring 管理,好让它能够识别我们标记的@Controller 。

   第一种方式是在SpringMVC 的配置文件中定义MyController 的bean 对象。

<bean class="com.host.app.web.controller.MyController"/>

   第二种方式是在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器。

    < context:component-scan base-package = "com.host.app.web.controller" >
       < context:exclude-filter type = "annotation"
           expression = "org.springframework.stereotype.Service" />
    </ context:component-scan >

注:上面 context:exclude-filter 标注的是不扫描 @Service 标注的类

★★ @Service 用于标注业务层组件

 

 ★★@Repository 用于标注数据访问组件,即DAO组件。

 

★★@Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Service@Controller@Repository@Component 这四种注解仅仅是角色不同,但实质都一样。

 

2、使用bean/装配bean

★★@Autowired :Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 需要导入包org.springframework.beans.factory.annotation.Autowired

 

对类成员变量使用 @Autowired来消除 set get方法。

@Autowired 将查找被标注方法的入参类型的 Bean,并调用方法自动注入这些 Bean

※装配顺序:在使用@Autowired时,首先在容器中查询对应类型的bean

如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据

如果查询的结果不止一个,那么@Autowired会根据名称来查找。

如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false。

★★@Qualifier标记,来指定需要装配bean的名称

 使用原因:按类型自动装配可能多个bean实例的情况,可以使用Spring@Qualifier注解缩小范围(或指定唯一)

使用范围:对类成员变量、方法参数及构造函数参数进行标注

 

★★@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配

使用范围:  类成员变量、方法及构造函数进行标注

 

 注:1 @Resource装配顺序:

①如果同时指定了nametype,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。

 

2@Resource注解在spring安装目录的lib\j2ee\common-annotations.jar

   <context:annotation-config/>  必不可少

 

3@Resource@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

 

posted on 2017-12-27 14:27  helloJava小白  阅读(304)  评论(0)    收藏  举报

导航