A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Dr.Rain 初级黑马   /  2017-11-26 14:39  /  1242 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

spring相关注解
常用注解:[/quote]
1.@Autowired注解(不推荐使用,建议使用@Resource)
@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。@Autowired的标注位置不同,它们都会在Spring在初始化这个bean时,自动装配这个属性。
2. @Qualifier注解
@Autowired是根据类型进行自动装配的。例如,如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题。如下:
1). 可能存在多个UserDao实例 Java代码
@Autowired        
@Qualifier("userServiceImpl")         
public IUserService userService;  
或者 Java代码
@Autowired        
public void setUserDao(@Qualifier("userDao") UserDao userDao) {        
  this.userDao = userDao;         
}  
这样,Spring会找到id为userServiceImpl和userDao的bean进行装配。
2). 可能不存在UserDao实例 Java代码
@Autowired(required = false)        
public IUserService userService;
3. @Resource注解
JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解。@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。@Resource有两个属性是比较重要的,分别是name和type,Spring将 @Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序:
a.如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常 。
b.如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
c.如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常 。
d.如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型(UserDao)进行匹配,如果匹配则自动装配。
4.@Scope注解
在使用XML定义Bean时,我们可能还需要通过bean的scope属性来定义一个Bean的作用范围,我们同样可以通过@Scope注解来完成这项工作:
Java代码
@Scope("session")         
@Component()         
public class UserSessionBean implements Serializable{
……
}
5. @PostConstruct注解
在方法上加上注解@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并装配Bean的属性(依赖注入))。它的一个典型的应用场景是,当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的setter方法时,如:
public class UserDaoImpl extends HibernateDaoSupport implements UserDao
{   
private SessionFactory mySessionFacotry;
@Resource     
public void setMySessionFacotry(SessionFactory sessionFacotry) {         
this.mySessionFacotry = sessionFacotry;      
}
@PostConstruct        
public void injectSessionFactory(){         
super.setSessionFactory(mySessionFacotry);         
}     
}  
这里通过@PostConstruct,为UserDaoImpl的父类里定义的一个sessionFactory私有属性,注入了我们自己定义的 sessionFactory(父类的setSessionFactory方法为final,不可复写),之后我们就可以通过调用 super.getSessionFactory()来访问该属性了。
6. @PreDestroy注解
在方法上加上注解@PreDestroy,这个方法就会在Bean初始化之后被Spring容器执行。其用法同@PostConstruct。和@PostConstruct 区别在于:@PostConstruct注释的方法将在类实例化后调用,而标注了 @PreDestroy 的方法将在类销毁之前调用。
7. @Component注解
只需要在对应的类上加上一个@Component注解,就将该类定义为一个Bean了。Spring还提供了更加细化的注解形式:@Repository、@Service、@Controller,它们分别对应存储层Bean,业务层Bean,和展示层Bean。目前版本(2.5)中,这些注解与@Component的语义是一样的,完全通用,在Spring以后的版本中可能会给它们追加更多的语义。所以,我们推荐使用@Repository、@Service、@Controller来替代@Component。
8. @Lazy(true) 表示延迟初始化
9. @Service用于标注业务层组件
10.@PostConstruct用于指定初始化方法(用在方法上)
11.@Controller用于标注控制层组件(如struts中的action)
@Controller的基本目标是担任所注解的类的原型的角色,指明它的职责。
12.@RequestMapping
@RequestMapping是一种通过匹配URL路径来访问相应页面的
分类:类级别的和方法级别的
@RequestMapping的几种形式:
@RequestMapping(method = RequestMethod.GET)
@RequestMapping(value="/{day}", method = RequestMethod.GET)//day为方法中的参数
@RequestMapping(value="/new", method = RequestMethod.GET)
将@RequestMapping放在类级别上,这可令它与方法级别上的@RequestMapping注解协同工作,取得缩小选择范围的效果,如下:
@RequestMapping("/a")//类级别,可以不需要,如果要了,下面所有的请求路径前都需要加入 /a
public class ccccontroller{
@RequestMapping("/b")//方法级别,必须有,决定这个方法处理哪个请求,如果有类级别 /a/b
    @RequestMapping(value="/b" method=RequestMethod.POST)
    @RequestMapping(value="/b", method=RequestMethod.GET, params="type=checking")
    @RequestMapping
public String show()
{
//如果没有类级别的就直接请求/b
return;
}
}
第一个是一种简写方式,匹配路径为 “/a/b”;
第二个方法级的请求映射和类级别的映射结合,当HTTP方法是POST时与路径“/a/b”匹配;
第三个添加了一个要求,就是名为“type”的请求参数和其值“checking”都需要在请求中出现;
第四个根本就没有指定路径,这个方法匹配所有的 HTTP方法,如果有必要的话可以用它的方法名。下面改写我们的方法,使它可以依靠方法名进行匹配。
13. @Aspect
作用是把当前类标识为一个切面供容器读取。
14 @Before
标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有。
15. @AfterReturning
后置增强,相当于AfterReturningAdvice,方法正常退出时执行
16. @AfterThrowing
异常抛出增强,相当于ThrowsAdvice
17. @After
final增强,不管是抛出异常或者正常退出都会执行
18. @Around
环绕增强,相当于MethodInterceptor
19. @DeclareParents
引介增强,相当于IntroductionInterceptor

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马