Spring的IOC的注解的详解 迈不过友情╰ 2021-06-24 16:09 384阅读 0赞 ## 简介 ## 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(); } }
还没有评论,来说两句吧...