Spring的IOC的注解的详解

版权声明:本文为Banana原创文章,未经Banana允许不得转载。评论请留下你认真观看后的想法或者意见,非常感谢! https://blog.csdn.net/qq1515312832/article/details/85560473

简介

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();
	}
 
}

猜你喜欢

转载自blog.csdn.net/qq1515312832/article/details/85560473