Spring常用注解
-
@Autowired
-
作用:消除代码里的getter/setter与bean属性中的property
-
如果私有属性需要对外提供的话,应予以保留。
-
@Autowired默认按类型匹配bean,当有且只有一个匹配的bean时,Spring将其注入@Autowired标注的变量中。
<context:component-scan base-package="com.spring" />//告诉Spring要是用注解了,Spring会自动扫描base-package路径下的注解 <bean id="zoo" class="com.spring.model.Zoo" /> <bean id="tiger" class="com.spring.model.Tiger" /> <bean id="monkey" class="com.spring.model.Monkey" />
-
@Autowired(required=false)属性找不到时不会抛异常,显示null
-
-
@Qualifier(指定注入Bean的名称)
-
例如一个接口有两个实现类时,当引用这个接口时Spring并不知道引用哪个实现类,此时需要@Qualifier注解来指定bean的名称:
public class CarFactory { @Autowired @Qualifier("bmwCar") private ICar car; public String toString(){ return car.getCarName(); } }
-
-
@Resource
-
eg:
package com.spring.model; import javax.annotation.Resource; public class Zoo1 { @Resource(name="tiger") private Tiger tiger; @Resource(type=Monkey.class) private Monkey monkey; public String toString(){ return tiger + "\n" + monkey; } }
-
@Resource后面没有内容时,默认通过name属性去匹配bean,找不到再按type去匹配。
-
指定了name和type的则根据指定的类型去匹配。
-
@Autowired和@Resource的区别:
-
@Autowired默认按照type进行匹配,@Resource则默认按照name进行匹配。
-
@Autowired是Spring的注解,@Resource是J2EE的注解,建议使用@Resource注解,以减少代码和Spring之间的耦合。
-
-
@Service
-
代替Spring配置文件中的bean。
-
eg:
package com.spring.model; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class Zoo { @Autowired private Tiger tiger; @Autowired private Monkey monkey; public String toString(){ return tiger + "\n" + monkey; } }
-
-
@Service声明Zoo.java是一个bean,这样其他的类2才可以使用@Autowired将这个类作为一个成员变量自动注入。
-
默认在bean中的id是类名且首字母小写。也可以自己定义id名eg:
- @Service(“Zoo”)
- @Scope(“prototype”)
-
Spring默认产生的bean是单例的,如果不想使用单例,则在xml文件里bean里配置scope属性,或者@Scope即可,默认是’singleton’即单例,'prototype’则表示原型每次都会new一个新的出来。
-
使用注解来构造IOC容器
用注解来向Spring容器注册Bean。需要早applicationContext.xml中注册
<context:component-scan base-package=“pagkage1[,pagkage2,…,pagkageN]”/>
如:在base-package指明一个包,表明在这个包及其子包中如果某个类的头上带有特定的注解【@Component/@Repository/@Service/@Controller】,就会将这个对象作为Bean注册进Spring容器。
同时也可以指定多个包,用逗号隔开。
-
@Component
- @Component是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。
-
@Controller
-
@Controller对应表现层的Bean,也就是Action
-
例如:
@Controller
@Scope(“prototype”)
public class UserAction extends BaseAction{
……
} -
@Controller(value="")或者@Controller("")则使用value作为bean的名字。默认为类名首字母小写。
-
@Scope(“prototype”)表示将Action的范围声明为原型,保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。
-
spring 默认scope 是单例模式(scope=“singleton”),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope=“prototype” 可以保证当有请求的时候都创建一个Action对象。
-
-
@Service
-
@Service对应的是业务层Bean,例如:
@Service("userService") public class UserServiceImpl implements UserService { ……… }
6/9/2017 6:32:19 PM
-
@Service(“userService”)注解是告诉Spring,当Spring要创建UserServiceImpl的实例时,bean的名字必须叫"userService",这样当Action需要使用UserServiceImpl的实例的时候,就可以由Spring创建好的"userService"注入给Action(Action只需声明一个名字为"userService"的变量来接收由Spring注入的"userService"即可)
//注入userService @Resource(name="userService") private UserService userService;
-
这样,Spring就会帮助Action完成userService的实例化,就不需要通过new ()的方式实例化对象了。主动权到了Spring手里,这就是Spring的核心思想"控制反转",也叫"依赖注入",Action需要使用UserServiceImpl干活,那么就是对UserServiceImpl产生了依赖,Spring把Acion需要依赖的UserServiceImpl注入(也就是“给”)给Action,这就是所谓的“依赖注入”。对Action而言,Action依赖什么东西,就请求Spring注入给他,对Spring而言,Action需要什么,Spring就主动注入给他。
-
-
@Repository
-
@Repository对应数据访问层bean
@Repository(value="userDao") public class UserDaoImpl extends BaseDaoImpl<User>{ ...... }
-
@Repository(value=“userDao”)注解就是告诉Spring,让Spring创建一个名字叫"userDao"的UserDaoImpl实例。
-
Spring常用注解1
- @Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
- @Scope注解 作用域
- @Lazy(true) 表示延迟初始化
- @Service用于标注业务层组件
- @Controller用于标注控制层组件(如struts中的action)
- @Repository用于标注数据访问组件,即DAO组件。
- @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
- @Scope用于指定scope作用域的(用在类上)
- @PostConstruct用于指定初始化方法(用在方法上)
- @PreDestory用于指定销毁方法(用在方法上)
- @DependsOn:定义Bean初始化及销毁时的顺序
- @Primary:自动装配时当出现多个Bean候选者时,被注解
- @Primary的Bean将作为首选者,否则将抛出异常
- @Autowired 默认按类型装配,如果我们想使用按名称装配,以结合@Qualifier注解一起使用。如下:
- @Autowired @Qualifier(“personDaoBean”) 存在多个实例配合使用
- @Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
- @PostConstruct 初始化注解
- @PreDestroy 摧毁注解 默认 单例 启动就加载
- @Async异步方法调用