Spring基础知识(3)
2016-05-10 17:28
387 查看
一、IoC容器装配Bean(注解方式)
1、使用注解方式进行Bean注册
xml 方式: <bean id="" class="">
spring2.5版本 提供一组注解,完成Bean注册
* @Component 描述Spring框架中Bean
第一步:
编写class,在类声明上添加@component
@Component("helloService")
// <bean id="helloService" class="...." />
public class HelloService {
}
第二步:
编写applicationContext.xml,--->通知Spring 注解类所在包
* 需要引入 context 名称空间
<context:component-scan base-package="cn.itcast.spring.a_beandefinition"></context:component-scan>
spring2.5 引入@Component 等效三个衍生注解
* @Repository 用于对DAO实现类进行标注 (持久层)
* @Service 用于对Service实现类进行标注 (业务层)
* @Controller 用于对Controller实现类进行标注 (表现层)
2、属性依赖注入
1) 简单属性的注入 通过 @Value注解完成
2) 复杂属性注入,通过@Autowired注解 完成Bean自动装配
@Autowired 默认按照类型进行注入
3) 使用@Resource注解 完成复杂对象Bean装配
@Resource和@Autowired注解功能相似
@Autowired
@Qualifer("userDAO")
private UserDAO userDAO ;
等价于
@Resource(name="userDAO")
private UserDAO userDAO ;
3、Bean其它属性设置
1) 指定Bean的初始化方法和销毁方法(注解) <bean init-method="" destroy-method="" />
@PostConstruct 作用 init-method
@PreDestroy 作用 destroy-method
2) Bean的作用范围 <bean scope="" />
@Scope 注解 ,默认作用域 singleton 单例
添加@Scope("prototype")之前效果:
添加之后:
4、Spring3.0 提供 注册Bean的注解
@Configuration 指定POJO类为Spring提供Bean定义信息
@Bean 提供一个Bean定义信息
以JavaConfig技术为核心,JavaConfig技术:其思想就是用一个java类来作为配置文件。
5、xml和注解混合使用
很多企业开发者 还是采用 xml作为主流配置。
混合使用时的分工:
* Bean 注册 通过XML完成
* 注入使用 @Autowired 注解完成
<context:annotation-config/> 启用四个注解 使@Resource、@ PostConstruct、@ PreDestroy、@Autowired注解生效
结论 :
1)xml配置 和 注解配置 效果完全相同
2)如果Bean 来自第三方, 必须使用xml
3)Spring3.0 Bean注册方式, 使用比较少,主要用于Bean 构造逻辑及其复杂
1、使用注解方式进行Bean注册
xml 方式: <bean id="" class="">
spring2.5版本 提供一组注解,完成Bean注册
* @Component 描述Spring框架中Bean
第一步:
编写class,在类声明上添加@component
@Component("helloService")
// <bean id="helloService" class="...." />
public class HelloService {
}
第二步:
编写applicationContext.xml,--->通知Spring 注解类所在包
* 需要引入 context 名称空间
<context:component-scan base-package="cn.itcast.spring.a_beandefinition"></context:component-scan>
spring2.5 引入@Component 等效三个衍生注解
* @Repository 用于对DAO实现类进行标注 (持久层)
* @Service 用于对Service实现类进行标注 (业务层)
* @Controller 用于对Controller实现类进行标注 (表现层)
2、属性依赖注入
1) 简单属性的注入 通过 @Value注解完成
2) 复杂属性注入,通过@Autowired注解 完成Bean自动装配
@Autowired 默认按照类型进行注入
@Service("userService") public class UserService { //简单属性 @Value("wade") private String name; //复杂对象 @Autowired private UserDao userDao; @Override public String toString() { return "UserService [name=" + name + ", userDao=" + userDao + "]"; } }
@Repository("userDao") public class UserDao { }
public class SpringTest { @Test public void demo1(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = (UserService) applicationContext.getBean("userService"); System.out.println(userService); } }☆注意:@Value、 @Autowired注解都可以修饰 成员变量 或者 setter方法,如果修改成员变量,不需要提供setter方法
3) 使用@Resource注解 完成复杂对象Bean装配
@Resource和@Autowired注解功能相似
@Autowired
@Qualifer("userDAO")
private UserDAO userDAO ;
等价于
@Resource(name="userDAO")
private UserDAO userDAO ;
3、Bean其它属性设置
1) 指定Bean的初始化方法和销毁方法(注解) <bean init-method="" destroy-method="" />
@PostConstruct 作用 init-method
@PreDestroy 作用 destroy-method
@Component("lifeCycleBean") public class LifeCycleBean { @PostConstruct public void setup(){ System.out.println("初始化……"); } @PreDestroy public void teardown(){ System.out.println("销毁……"); } }
public class SpringTest { @Test public void demo1(){ // ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); LifeCycleBean lifeCycleBean = (LifeCycleBean) applicationContext.getBean("lifeCycleBean"); System.out.println(lifeCycleBean); //☆注意:如果想要销毁方法执行,必须销毁ApplicationContext,此时,使用ApplicationContext对象是不行的,要使用其子类对象:<span style="font-family: Arial, Helvetica, sans-serif;">ClassPathXmlApplicationContext</span> applicationContext.close(); }
2) Bean的作用范围 <bean scope="" />
@Scope 注解 ,默认作用域 singleton 单例
@Component("scopeBean") //如果没有指定scope,默认是单例singleton @Scope("prototype") public class ScopeBean { }
@Test public void demo2(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); ScopeBean scopeBean = (ScopeBean) applicationContext.getBean("scopeBean"); System.out.println(scopeBean); ScopeBean scopeBean2 = (ScopeBean) applicationContext.getBean("scopeBean"); System.out.println(scopeBean2); }
添加@Scope("prototype")之前效果:
添加之后:
4、Spring3.0 提供 注册Bean的注解
@Configuration 指定POJO类为Spring提供Bean定义信息
@Bean 提供一个Bean定义信息
以JavaConfig技术为核心,JavaConfig技术:其思想就是用一个java类来作为配置文件。
public class Car { private String name; private double price; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Car [name=" + name + ", price=" + price + "]"; } }
public class Product { private String pname; private int pnum; public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getPnum() { return pnum; } public void setPnum(int pnum) { this.pnum = pnum; } @Override public String toString() { return "Product [pname=" + pname + ", pnum=" + pnum + "]"; } }
@Configuration public class BeanConfig { @Bean(name="car") public Car initCar(){ Car car = new Car(); car.setName("奥迪"); car.setPrice(400000); return car; } @Bean(name="product") public Product showProduct(){ Product product = new Product(); product.setPname("电脑"); product.setPnum(5); return product; } }
public class SpringTest { @Test public void demo(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); Car car = (Car) applicationContext.getBean("car"); System.out.println(car); Product product = (Product) applicationContext.getBean("product"); System.out.println(product); } }结果:
5、xml和注解混合使用
很多企业开发者 还是采用 xml作为主流配置。
混合使用时的分工:
* Bean 注册 通过XML完成
* 注入使用 @Autowired 注解完成
<context:annotation-config/> 启用四个注解 使@Resource、@ PostConstruct、@ PreDestroy、@Autowired注解生效
结论 :
1)xml配置 和 注解配置 效果完全相同
2)如果Bean 来自第三方, 必须使用xml
3)Spring3.0 Bean注册方式, 使用比较少,主要用于Bean 构造逻辑及其复杂
相关文章推荐
- struts2服务端与android交互
- struts-spring-mybatis整合项目搭建
- 标准的Java编码规范手册
- 标准的Java编码规范手册
- Java学习笔记--异常
- spring + springmvc 项目中 @Autowired 自动转载失败问题及解决
- java基础
- 关于MyEclipse中lib导包和buildpath的区别
- java1.8中Lambda表达式reduce聚合测试例子
- JAVA中线程同步的方法(7种)汇总
- 【转】XML注释与Description标签及Java:注解(Annotation)的关系
- java集合类深入分析之HashSet, HashMap篇
- Java语言使用HttpClient模拟浏览器登录
- JSP中使用SpringBoot Security步骤
- 大话设计模式java版本 第二章 策略模式
- Java 集合 - LinkedList
- java 抽象类和接口
- 如何把eclipse的项目托管到github
- Java中Dom解析xml的一个实例
- Java定义数组