首页 > 编程语言 > 详细

spring常见注解

时间:2019-07-17 10:10:27      阅读:167      评论:0      收藏:0      [点我收藏+]
1、包层的注解:@Controller,@Service,@Repository,@Component
@Controller:写在Controller控制层的类上方
@Service: 写在Service业务层的类上方
@Repository:写在Dao层的类上方,
@Component:泛化的概念,可以作用在任何层次
(1.1)前提:applicationContext.xml中要有
<context:component-scan base-package=”com”> ,表示默认情况下自动扫描指定com包下的所有类(含所有子包),将带有@Component、@Repository、@Service、@Controller标签的类自动注册到spring容器
(1.2)上述注解标识的Bean类,其默认作用域是"singleton",即每次创建的实体bean类互不相干
(1.3)使用:
对标记了 @Required、@Autowired、@Resource、@PersistenceUnit等注解的类对象进行注入。
如:
(1.3.1)@Autowired可用在属性、setter方法或构造函数上方
(1.3.1.1)
@Autowired默认先按byType方式注入,再按byName方式注入。即 spring先找类型为People的bean类/子bean类(People 类上方要指定@Component等注解):
@Autowired
private People peo; 
否则若People 类上方没被@Component等任意一个注解,则按byName方式注入,即寻找value值为属性名”peo“的类对peo类变量进行注入,如
@Component(value="peo")
public class PeopleImpl extends People(){...}
(1.3.1.2)使用@Qualifier标签,可以手动指定按照byName方式注入
@Autowired
@Qualifier("peo")
private People people; //PeopleImpl 类上方要指定@Component("peo"),且        
                       //@Component可用其他三个@注解代替        

(1.3.2)@Resource可用在属性、setter方法上方,默认按照ByName自动注入,name值为bean类首字母小写(People 类上方要指定@Component等注解,同时包含@Resource注解的类上方也要指定@Component):

@Resource(name="people")
private People peo;

上面@Resource(name="people")指定了name值,则只会按照名称进行装配。

若@Resource无指定name值,则按属性名“peo”查找bean类,bean类上方要指定@Component("peo")等注解;若@Resource写在setter方法上也是默认截取setterPeople()的属性名得到"people",然后按这个属性名查找bean类进行注入,bean类上方要指定@Component("people")等注解;当找不到与属性名想匹配的类时,则直接按照byType进行People类型进行装配;推荐使用@Resource注解,这个注解是属于J2EE的,减少了与Spring的耦合
(1.3.3)@Required只能设置在setter方法上
在xml中用<bean></bean>对People 类进行注解时,People 类下的某个属性的setter方法上方有@Required,则<bean></bean>中必须对该属性值进行注入(即赋值):
public class People { 
    private Integer age; 
    private String name; 
    @Required 
   public void setAge(Integer age) { this.age = age; } public void setName(String name) { this.name = name; } }
xml文件:(name属性可注入可不注入,age属性必须注入)
<bean id="p" class="com.entity.People"> 
    <property name="age" value="11"/> 
</bean>

2、@Bean注解

(1)@Bean注解标识一个用于配置和初始化的方法,类似于xml文件的<bean><bean/>注解,作用类似于在自定义的ServiceImpl上写@Service注入自己的Impl类
(2)
@Configuration //或@Component,必写
public class AppConfig()  
{ 
    @Bean
    public People getPeople()  //返回类People对应<bean>中小写的people
    {
    return new People();    
   } 
}  

等价于:

<beans>
    <bean id="people" class="com.hand.core.People"></bean>
</beans>

(3)@Bean可以自定义name从与而<bean>的id保持一致

@Bean(name="myPeople")
与
<beans>  
     <bean id="myPeople" class="com.hand.core.People"></bean/>  
</beans>
等价

3、Hibernate注解:@NotNull和@NotEmpty和@NotBlank区别

@NotNull:不能为null,但可以为empty,长度可以为0
@NotEmpty:不能为null,而且长度必须大于0
@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须
大于0
4、自定义注解
以下自定义了一个注解@StdWho :
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface StdWho {
}

(1)@Targe

定义注解的作用目标,可取值为:
技术分享图片
上面自定义@Target({ElementType.PARAMETER})为作用在函数参数上
(2)@Retention
参数RetentionPolicy.RUNTIME就说明了:@StdWho注解在程序运行时是可见的
RetentionPolicy的枚举类型还有SOURCE、CLASS分别指定注解对于哪个级别是可见的,但是我们一般都是用RUNTIME,因为这是在程序运行时可以对注解进行读取,从而易于软件的测试
 

spring常见注解

原文:https://www.cnblogs.com/afei1759/p/11198430.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!