标签:
xml 方式: <bean id="" class="">
spring2.5版本 提供一组注解,完成Bean注册
* @Component 描述Spring框架中Bean
导入jar 和 xml方式开发是相同的
第一步 编写Class,在声明上 添加 @Component
/** * 使用Spring2.5注解 注册Bean */@Component("helloService")// <bean id="helloService" class="...." />publicclassHelloService{publicvoid sayHello(){System.out.println("hello, spring annotation!");}}第二步 编写applicationContext.xml 通知Spring注解类所在包
* 需要引入 context 名称空间
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置 注解Bean 所在包 --><context:annotation-config/><context:component-scanbase-package="cn.itcast.spring.a_beandefinition"></context:component-scan></beans>publicclassSpringTest{@Test// 测试 注解Bean 注册publicvoid demo1(){ApplicationContext applicationContext =newClassPathXmlApplicationContext("applicationContext.xml");HelloService helloService =(HelloService) applicationContext.getBean("helloService"); helloService.sayHello();}}* @Repository 用于对DAO实现类进行标注 (持久层)
* @Service 用于对Service实现类进行标注 (业务层)
* @Controller 用于对Controller实现类进行标注 (表现层)
1) 简单属性的注入 通过 @Value注解完成,不需要提供setter方法
@Service("userService")public class UserService { // 注入name属性 @Value("itcast") private String name;}2) 复杂属性注入,通过@Autowired注解 完成Bean自动装配
@Autowired 默认按照类型进行注入
/** * 用户操作数据层 */@Repository("userDAO")publicclassUserDAO{}/** * 用户业务层 */@Service("userService")publicclassUserService{// 注入name属性@Value("itcast")// 简单属性privateString name; @AutowiredprivateUserDAO userDAO;@OverridepublicString toString(){return"UserService [name="+ name +", userDAO="+ userDAO +"]";}}
@Autowired注解 结合 @Qualifer注解按照名称注入
@Service("userService")public class UserService { @Autowired @Qualifier("uDAO") // 复杂对象 private UserDAO userDAO;}
@Repository("uDAO")public class UserDAO { }3) 使用@Resource注解 完成复杂对象Bean装配
@Resource和@Autowired注解功能相似
@Autowired@Qualifer("userDAO")private UserDAO userDAO ; @Resource(name="userDAO")private UserDAO userDAO ;1) 指定Bean的初始化方法和销毁方法(注解) <bean init-method="" destroy-method="" />
@PostConstruct 作用 init-method
@PreDestroy 作用 destroy-method
@Component("lifeBean")publicclassLifeCycleBean{@PostConstructpublicvoid setup(){System.out.println("初始化...");}@PreDestroypublicvoid teardown(){System.out.println("销毁...");}}@Test// 测试初始化和销毁publicvoid demo1(){ ClassPathXmlApplicationContext applicationContext =newClassPathXmlApplicationContext("applicationContext.xml"); LifeCycleBean lifeCycleBean =(LifeCycleBean) applicationContext.getBean("lifeBean"); System.out.println(lifeCycleBean); // 销毁方法执行,必须销毁ApplicationContext applicationContext.close();}2) Bean的作用范围 <bean scope="" />
@Scope 注解 ,默认作用域 singleton 单例
@Component("scopeBean")// 如果没有指定scope 是 singleton 单例@Scope("prototype")publicclassScopeBean{}@Test// 测试Bean 范围publicvoid demo2(){ApplicationContext applicationContext =newClassPathXmlApplicationContext("applicationContext.xml");ScopeBean scopeBean =(ScopeBean) applicationContext.getBean("scopeBean");System.out.println(scopeBean);ScopeBean scopeBean2 =(ScopeBean) applicationContext.getBean("scopeBean");System.out.println(scopeBean2);}@Configuration 指定POJO类为Spring提供Bean定义信息
@Bean 提供一个Bean定义信息
先定义2个JavaBean:
// 轿车publicclassCar{privateString name;privatedouble price;publicString getName(){return name;}publicvoid setName(String name){this.name = name;}publicdouble getPrice(){return price;}publicvoid setPrice(double price){this.price = price;}@OverridepublicString toString(){return"Car [name="+ name +", price="+ price +"]";}}// 商品publicclassProduct{privateString pname;privateint pnum;publicString getPname(){return pname;}publicvoid setPname(String pname){this.pname = pname;}publicint getPnum(){return pnum;}publicvoid setPnum(int pnum){this.pnum = pnum;}@OverridepublicString toString(){return"Product [pname="+ pname +", pnum="+ pnum +"]";}}/** * 配置Bean (工厂) */@ConfigurationpublicclassBeanConfig{// 提供两个方法 获得Car和Product对象@Bean(name ="car") //方法名称随意publicCar initCar(){Car car =newCar(); car.setName("大众"); car.setPrice(10000);return car;}@Bean(name ="product")publicProduct showProduct(){Product product =newProduct(); product.setPname("空调"); product.setPnum(100);return product;}}@Test// 获得配置Bean 工厂创建Bean对象publicvoid demo(){ApplicationContext applicationContext =newClassPathXmlApplicationContext("applicationContext.xml");Car car =(Car) applicationContext.getBean("car");System.out.println(car);Product product =(Product) applicationContext.getBean("product");System.out.println(product);}
很多企业开发者 还是采用xml作为主流配置
* Bean 注册 通过XML完成
* 注入使用 @Autowired 注解完成
将2个Dao注入到Service
// 客户DAOpublicclassCustomerDAO{}// 订单DAOpublicclassOrderDAO{}// 客户ServicepublicclassCustomerService{// xml注入privateCustomerDAO customerDAO;publicvoid setCustomerDAO(CustomerDAO customerDAO){this.customerDAO = customerDAO;}@OverridepublicString toString(){return"CustomerService [orderDAO="+ orderDAO +", customerDAO="+ customerDAO +"]";}}<bean id="customerDAO"class="cn.itcast.spring.e_xmluseannotaion.CustomerDAO"></bean><bean id="orderDAO" class="cn.itcast.spring.e_xmluseannotaion.OrderDAO"></bean><!--将DAO 注入Service--><bean id="customerService"class="cn.itcast.spring.e_xmluseannotaion.CustomerService"><property name="customerDAO" ref="customerDAO"></property></bean>@Test// 完成 DAO 注入到Service测试publicvoid demo(){ApplicationContext applicationContext =newClassPathXmlApplicationContext("applicationContext2.xml");CustomerService customerService =(CustomerService) applicationContext.getBean("customerService");System.out.println(customerService);}// 客户ServicepublicclassCustomerService{// 注解注入@AutowiredprivateOrderDAO orderDAO;// xml注入privateCustomerDAO customerDAO;publicvoid setCustomerDAO(CustomerDAO customerDAO){this.customerDAO = customerDAO;}@OverridepublicString toString(){return"CustomerService [orderDAO="+ orderDAO +", customerDAO="+ customerDAO +"]";}}<context:annotation-config/> 启用四个注解 使@Resource、@ PostConstruct、@ PreDestroy、@Autowired注解生效
结论 :
1、 xml配置 和 注解配置 效果完全相同
2、 如果Bean 来自第三方(源码无法改动), 必须使用xml
3、 Spring3.0 Bean注册方式, 使用比较少,主要用于Bean 构造逻辑及其复杂
标签:
原文地址:http://www.cnblogs.com/tangwan/p/4674974.html