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装配顺序:
①如果同时指定了name和type,则从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) 收藏 举报
浙公网安备 33010602011771号