简单常用的注解

来源:互联网 发布:会员购淘宝u站 编辑:程序博客网 时间:2024/06/06 19:42

从Spring3.0开始,Spring javaConfig项目提供了很多的特性,包括使用java而不是xml定义bean,比如 :

@Configuration,@Bean,@Import,@DependsOn

@Component 是一个通用注解,可以用于任何的bean

——-@Repository通常用于注解Dao类,即持久层

——-@Service通常用于注解service层,即服务层

——-@Constorller通常用于Controller类,即控制层

在applicationCotext.xml中配置的bean默认都是单例模式,
那么在类上架注解的时候,可以设置其的作用域,设置为singleton就是单例模式。设置成protptype,每一次请求都会生成一个新的对象。

在测试的时候用applicationContext ,不要用XmlBeanFactory 去解析

//正确String [] location ={"applicationContext.xml"};        ApplicationContext  ctx= new ClassPathXmlApplicationContext(location);        TestService testService =(TestService) ctx.getBean("testServiceImpl");         testService.save("aaaaa");
 //错误        ClassPathResource resource = new ClassPathResource(                "applicationContext.xml");        BeanFactory bf = new XmlBeanFactory(resource);       Concal concal =(Concal) bf.getBean("concal");

因为xmlBeanFactory默认不支持beanPostProcessor

用@Autowired注解的时候。可以加在三个地方
1、成员变量的上方(可以省略set、get方法)
2、set方法的上方
3、构造方法的上方(可以省略set、get )

**可以使用@Autowired来注解哪些中所周知的接口,eg:BeanFactory
,ApplicationContext,Environment,ResourceLoader,ApplicationEventPublisher,andMessageSource**

在使用@Autowired时候。当其加在list上时候,获得的是该list的泛型的对象
当其加在map上时,key是对象的首字母小写的名称,value是对象。

@Qualifier注解可以缩小范围,常用在 @Autowired适用的fields,constructors,multi-argument method这些允许参数级别的地方。可以使用@Qualifier来缩小范围

@Resource适用于成员变量、只有一个参数的setter方法,所以目标是构造器或者一个多参数的方法的时候,最好的使用方式是使用@Qualifier注解

@Bean

@Bean标识一个用于适配和初始化一个由SpringIoc容器管理的新对象的方法,类似于xml配置文件的

可以在Spring的@Component注解的类中使用@Bean注解任何方法(仅仅是可以)

上一点中。通常使用的是@Configuration

@Configurationpublic class appConfig{   @Bean   public MyService myservice(){       return new MyService();   }}

这样的代码相当于在applicationContext.xml中的

<beans>    <bean id="myService" class="com.yyy.services.MyserviceImpl"></beans>

都是返回一个对象

在@Bean中也可以这样使用

//这是指定这个方法的id@Bean(name="myFoo")public Foo foo(){   return new Foo();}//在初始化的时候,调用foo中的init方法@Bean(initMethod="init")public Foo foo(){    return new Foo();}//在销毁的时候,调用bar中的cleanup方法@Bean(destoryMethod="cleanup")public Bar bar(){   return new Bar();}

用@Bean注解默认的是单例的,想要不是单例模式,就要用@Scope来定义作用域

@Bean@Scope("prototype")public UserPreference userService(){    UserService service =new SimpleUserService();    service.set...    return service;}

个人总结@Bean:

是加载在 @Configuration或者@Component 中的方法上。这个方法一般要返回一个实例对象 如new EXl();

0 0