13Spring通过注解配置Bean(1)
2015-06-19 16:26
423 查看
配置Bean的形式:基于XML文件的方式;基于注解的方式(基于注解配置Bean;基于注解来装配Bean的属性)
下面介绍基于注解的方式来配置Bean。
——组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件。
——特定组件包括:
1.@Component:基本注解,标识了一个受Spring管理的组件
2.@Respository:标识持久层组件
3.@Service:标识服务层(业务层)组件
4.@Controller:标识表现层组件
——对于扫描到的组件,Spring有默认的命名策略:使用非限定类名,第一个字母小写;也可以在注解中通过value属性标识组件的名称
当在组件类上使用了特定的注解之后,还需要在Spring的配置文件中声明<context:component-scan>(需要导入context命名空间):
——base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包里及其子包中的所有类。
——当需要扫描多个包时,可以使用逗号分隔
——如果仅希望扫描特定的类而非基包下的所有类,可适用resource-pattern属性过滤特定的类,实例:
<context:component-scan base-package=“com.spring.beans” resource-pattern="autowire/*.class"/>
——<context:include-filter>子节点表示要包含的目标类
——<context:exclude-filter>子节点表示要排除在外的目标类
——<context:component-scan>下可以拥有若干个<context:include-filter>和<context:exclude-filter>子节点
下面介绍基于注解的方式来配置Bean。
——组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件。
——特定组件包括:
1.@Component:基本注解,标识了一个受Spring管理的组件
2.@Respository:标识持久层组件
3.@Service:标识服务层(业务层)组件
4.@Controller:标识表现层组件
——对于扫描到的组件,Spring有默认的命名策略:使用非限定类名,第一个字母小写;也可以在注解中通过value属性标识组件的名称
当在组件类上使用了特定的注解之后,还需要在Spring的配置文件中声明<context:component-scan>(需要导入context命名空间):
——base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包里及其子包中的所有类。
——当需要扫描多个包时,可以使用逗号分隔
——如果仅希望扫描特定的类而非基包下的所有类,可适用resource-pattern属性过滤特定的类,实例:
<context:component-scan base-package=“com.spring.beans” resource-pattern="autowire/*.class"/>
——<context:include-filter>子节点表示要包含的目标类
——<context:exclude-filter>子节点表示要排除在外的目标类
——<context:component-scan>下可以拥有若干个<context:include-filter>和<context:exclude-filter>子节点
package annotation; import org.springframework.stereotype.Component; @Component public class TestObject { }
package annotation.repository; public interface UserRepository { void save(); }
package annotation.repository; import org.springframework.stereotype.Repository; @Repository(value = "userRepository") public class UserRepositoryImpl implements UserRepository { @Override public void save() { System.out.println("UserRepositoryImpl save"); } }
package annotation.controller; import org.springframework.stereotype.Controller; @Controller public class UserController { public void execute() { System.out.println("UserController execute"); } }
package annotation.service; import org.springframework.stereotype.Service; @Service public class UserService { public void add() { System.out.println("UserService add"); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--指定Spring IOC容器扫描的包--> <!--<context:component-scan base-package="annotation"> </context:component-scan>--> <!--可以通过resource-pattern指定扫描的资源--> <!--<context:component-scan base-package="annotation" resource-pattern="repository/*.class"> </context:component-scan>--> <!--context:exclude-filter 子节点指定排除哪些指定表达式的组件--> <!--context:include-filter 子节点指定包含指定表达式的组件,该子节点需要use-default-filters 配个使用--> <context:component-scan base-package="annotation"> <!--annotation表示根据指定注解来包含还是不包含--> <!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"></context:exclude-filter>--> <!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"></context:include-filter>--> <!--assignable根据指定类名来包含还是不包含--> <!-- <context:exclude-filter type="assignable" expression="annotation.repository.UserRepository"></context:exclude-filter>--> <!--<context:include-filter type="assignable" expression="annotation.repository.UserRepository"></context:include-filter>--> </context:component-scan> </beans>
package annotation; import annotation.controller.UserController; import annotation.repository.UserRepository; import annotation.service.UserService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("13-1.xml"); TestObject to = (TestObject) ctx.getBean("testObject"); System.out.println(to); UserController userController = (UserController) ctx.getBean("userController"); System.out.println(userController); UserService userService = (UserService) ctx.getBean("userService"); System.out.println(userService); UserRepository userRepository = (UserRepository) ctx.getBean("userRepository"); System.out.println(userRepository); } }
相关文章推荐
- CXF(2.7.10) - WSDL2Java generated Client
- 技术演绎之 [ java ] 数据类型转换
- 生产者/消费者问题的多种Java实现方式
- eclipse 4.4安装aptana插件
- (转)easyEclipse,pydev断点调试Django
- springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例
- java数组随机乱序且乱序后不在其原来的位置上(代码片段)
- Java-马士兵设计模式学习笔记-观察者模式-读取properties文件改成单例模式
- 技术演绎之 [ java ] java 运算符
- 技术演绎之 [ java ] 变量与常量
- Java设计模式——类的关系
- java future模式举例
- 技术演绎之 [ java ] 数据格式化输出
- Java构造方法总结
- Map.toString()后字符串转换回Map
- java web项目中读取配置文件
- Java学习笔记(二)不定时更新
- java 环境变量的意义
- 技术演绎之 [ java ] java数据类型
- java高分局之JVM命令参数大全(高级垃圾回收选项)