简介
spring通过applicationContext.xml管理bean工厂,但是我们还有一种更加简便的方式就是使用IOC注解的方式来进行管理。
优缺点和对比
使用IOC注解的优点:
简洁明了、代码简单
使用IOC注解的缺点:
1.不够直观,使用xml配置文件的方式会让结构一目了然,但是使用IOC注解时,想知道各个类的实例需要进入到相应的类内部去看,相对麻烦。
2.不能对jar包里面的类使用。因为有时调用外部的jar包,我们不能对其进行IOC注解,所以只能对内部类使用IOC 注解。
和XML的比较(和上面优缺点类似)
适用场景:
XML:可以适用任何场景,结构清晰方便维护
注解:只能用在所有的类都是自己提供的地方
XML和注解的整合开发
XML管理Bean工厂,注解完成属性注入,下面进行的修改就是如此
IOC注解
@Component组件
@Controller:web层,主要是声明控制类
@Service:service层,主要是声明 service 服务类
@Repository:dao层,主要是声明 dao 的类组件
对属性注入的注解
普通属性:
@value 直接进行设置
对象属性:
@Autowire 设置对象类型的属性的值。但是按照类型安城属性注入。
@Resource 完成对象类型的属性注入,按照名称完成属性注入。
按照类型的话可以直接注入,如果按照名称的话需要配合@Qulifier一起使用。
Bean的其他注释
生命周期相关:
@PostConstruct:初始化方法
@PreDestroy:销毁方法
Bean作用范围的注解
@Scope:作用范围
singleton:默认单例
prototype:多例
Request
Session
globalsession
使用XML的方式
测试类:SpringDemo3
package com.banana.spring.demo3;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringDemo3 {
@Test
public void demo1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
ProductService productService = (ProductService) applicationContext.getBean("productService");
productService.save();
}
}
applicationContext.xml
<!-- 配置demo3 -->
<bean id="productService" class="com.banana.spring.demo3.ProductService">
<property name="productDao" ref="productDao" />
<property name="orderDao" ref="orderDao" />
</bean>
<bean id="productDao" class="com.banana.spring.demo3.ProductDao"></bean>
<bean id="orderDao" class="com.banana.spring.demo3.OrderDao"></bean>
OrderDao.java
package com.banana.spring.demo3;
public class OrderDao {
public void save(){
System.out.println("OrderDao得save方法执行了...");
}
}
测试类:ProductDao.java
package com.banana.spring.demo3;
public class ProductDao {
public void save(){
System.out.println("Product得save方法执行了...");
}
}
测试类:ProductService.java
package com.banana.spring.demo3;
public class ProductService {
private ProductDao productDao;
private OrderDao orderDao;
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}
public void setOrderDao(OrderDao orderDao) {
this.orderDao = orderDao;
}
public void save(){
System.out.println("ProductService的save方法执行了...");
productDao.save();
orderDao.save();
}
}
用了注解之后的修改
applicationContext.xml
<!-- 配置demo3 -->
<!-- 在没有扫描的情况下,使用属性注入的注解,可以使用:@Resource,@Value,@Autowire,@Qulifier -->
<context:annotation-config></context:annotation-config>
<bean id="productService" class="com.banana.spring.demo3.ProductService"></bean>
<bean id="productDao" class="com.banana.spring.demo3.ProductDao"></bean>
<bean id="orderDao" class="com.banana.spring.demo3.OrderDao"></bean>
ProductService.java
package com.banana.spring.demo3;
import javax.annotation.Resource;
public class ProductService {
@Resource(name="productDao")
private ProductDao productDao;
@Resource(name="orderDao")
private OrderDao orderDao;
public void save(){
System.out.println("ProductService的save方法执行了...");
productDao.save();
orderDao.save();
}
}