Spring核心三(基于注解的组件扫描)

来源:互联网 发布:淘宝限定皮肤cdk哪来的 编辑:程序博客网 时间:2024/05/29 11:33

1.组件扫描:指定一个包路劲,Spring会自动扫描该包及其子包所有组件类,当发现组件类定义前有特定的注解标记时,就将改组件纳入到Srping容器。等价于原有XML配置中的<bean>定义功能

 

2.指定扫描类路径<context:component-scanbase-package=”org.example”/>

ps:上面配置,容器实例化时会自动扫描org.example包及其子包下所有组件类

 

3.自动扫描的注解标记

         @Component通用注解

         @Name      通用注解

         @Repository持久化层组件注解

         @Service  业务层组件注解

         @Contrller控制层组件注解

 

4.当一个组件在扫描过程中被检测到时,会生成一个默认id值,默认id为小写开头的类名,也可以在注解标记中自定义id @Service(“loginService”)

 

5.指定组件的作用域 @Scope(“prototype”)

 

6. @PostConstruct和 @PreDestroy注解标记分别用于指定初始化和销毁回调方法

         publicclass ExampleBean{

                   @PostConstruct

                   publicvoid init(){

         //初始化回调方法

}

@PreDestroy

public void destroy(){

         //销毁回调方法

}

}

7.注入依赖关系

         具有依赖关系的Bean对象,利用下面任意一种注解都可以实现关系注入

         @ReSource

         @Autowired/@Qualifier

         @Inject/@Named

 

step1:@ReSource注解标记可以用在字段定义或setter方法定义前面,默认首先按名称匹配注入,然后类型匹配注入

         publicclass UserService{

         //@ReSource

         private UserDao userDao;

         @ReSource

         public void setUserDao(UserDao dao){

         this.userDao = dao;

}

}

当遇到多个匹配Bean时注入会发生错误,可以显示指定名称,例如@Resource(name=”empdao1”)

 

step2: @Autowired注解标记也可以用在字段定义或setter方法定义前面,默认按类型匹配注入

         publicclass UserService{

         //@Autowired

         private UserDao userDao;

         @Autowired

         public void setUserDao(UserDao dao){

         this.userDao = dao;

}

}

@Autowired当遇到多个匹配Bean时注入会发生错误,可以使用下面方法指定名称

         publicclass UserService{

         //@Autowired

         //@Qualifier(“mysqlUserDao”)

         private UserDao userDao;

         @Autowired

         public voidsetUserDao(@Qualifier(“mysqlUserDao”)UserDao dao){

         this.userDao = dao;

}

}

step3:@Inject注解标记是Spring3.0开始增添的对JSR-330标准的支持,使用前需要添加JSR-330的jar包,使用方法与@Autowired相似

 

8.注入Spring表达式值

@value注解可以注入Spring表达式值

step1: 首先在XML配置中指定要注入的properties文件

<util:propertiesid=”jdbcProps” location=”classpath:db.properties” />

step2: 然后在setter方法前使用@Value注解

         publicclass JDBCDataSource{

                   @Value(“#jdbcProps.url”)

                   privateString url;

        

                   @Value(“#{jdbcPros.driver}”)

                   publicvoid setUrl(String driver){

         try{

         Class.forName(driver)}

}catch(…)

}

}

阅读全文
1 0
原创粉丝点击