Spring的IOC的注解的详解

简介

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();
	}
 
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geek-Banana

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值