前面讲到了IOC与AOP的各种原理,那你知道IOC一般会应用于哪些场景呢?下面就一起来看看吧。
一、Spring简介
Spring是由Rod Johnson创建的目前使用非常广泛的开源框架。很难用一句简单的描述概括它的基本功能,Spring家族几乎可以解决我们在开发JavaEE项目中所有的问题,但Spring创建的初衷是为了解决企业级应用开发的复杂性,并致力于全方位简化Java开发。
为了降低Java开发的复杂性,Spring采取了以下4种关键策略:
1)基于POJO的轻量级和最小侵入性编程;
2)通过依赖注入和面向接口实现松耦合;
3)基于切面和惯例进行声明式编程;
4)通过切面和模板减少样板式代码。
spring框架通过依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)2项核心技术,来贯彻和执行上述4项策略。
二、IOC一般应用场景
spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,但是,我们还是需要告诉spring要创建哪些bean并且如何将其装配在一起。spring具有非常大的灵活性,它提供了三种主要的装配机制:
1)基于Xml的显式配置
<bean id="house" class="com.turing.wire1.PrintHouse"> <constructor-arg index="0" ref="pinPrinter"></constructor-arg> </bean>
public class PrintHouse { private Printer printer; public PrintHouse(Printer printer) { this.printer = printer; } public void service() { printer.print(); } }
2)基于Java的显式配置
在使用Java代码进行配置的时候,实际上是使用一个Java类来代替原先的spring.xml
@Configuration //代表这是一个spring配置类 public class BeanConfig { @Bean // 默认bean的id就是方法名 // 可以通过name进行修改 public PinPrinter pinPrinter() { return new PinPrinter(); } @Bean public LaserPrinter laserPrinter() { return new LaserPrinter(); } @Bean public PrintHouse printHouse(LaserPrinter printer) { return new PrintHouse(printer); } @Bean public PrintHouse printHouseOther(PinPrinter printer) { return new PrintHouse(printer); } public static void main(String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(BeanConfig.class); PrintHouse house = (PrintHouse) ctx.getBean("printHouse"); house.service(); ctx.close(); } }
3)自动化配置
使用@Component、@ComponentScan、@Autowired进行自动装配:
@Component public class LaserPrinter implements Printer { public void print() { System.out.println("使用激光打印机进行打印"); } } @Component public class PinPrinter implements Printer { public void print() { System.out.println("使用针孔打印机进行打印"); } } @Component public class PrintHouse { @Autowired //自动装配 @Qualifier("laserPrinter") //当有两个以上的bean满足时,通过该注解进行区分 private Printer printer; public void service() { printer.print(); } } @Configuration @ComponentScan public class Test { public static void main(String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Test.class); PrintHouse house = (PrintHouse) ctx.getBean("printHouse"); house.service(); ctx.close(); } }
@Component用来声明哪些bean需要由spring容器进行管理
@ComponentScan用来对声明了@Component的类启用组件扫描,spring将会扫描==这个包以及这个包下的所有子包==
@Autowired实现自动装配
在上述用例中,我们看到了Spring中装配Bean的三种主要方式:自动化配置、基于Java的显式配置以及基于Xml的显式配置。不管采用什么方式,这些技术都描述了Spring应用中的组件以及这些组件之间的关系。同时,建议尽可能使用自动化配置,以避免显式配置所带来的维护成本。从选择配置方式的优先级来看,建议按照以下顺序:==自动化配置-->基于Java的显式配置-->基于Xml的显式配置==。
以上就是关于springIOC应用场景的所有内容了,更多相关java常见问答知识请关注奇Q工具网了解详情。
推荐阅读: