1. 依赖注入和控制反转
依赖注入和控制反转
IoC是什么
Ioc—InversionofControl,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
2. IoC容器和bean
Spring通过IoC容器来管理所有Java对象及其相互之间的依赖关系。
IoC容器在创建bean的时候,会注入其依赖项。
IoC的应用有以下两种设计模式:
反射:在运行状态中,根据提供的类的路径或类名,通过反射来动态获取该类的所有属性和方法。
通过反射实现IOC功能
工厂模式:把IoC容器当做一个工厂,在配置文件或注解中给出定义,然后利用反射技术,根据给出的类名生成相应的对象。对象生成的代码及对象之间的依赖关系在配置文件中定义,实现了解耦。
Spring IoC容器的核心基础包:
- org.springframework.beans
- org.springframework.context
3. 配置和使用
配置方式有:
- xml形式
<bean id = "..." class="...">
<!-- 放置这个bean的协作者和配置 -->
</bean>
- 注解形式
@Configuration
public class AppConfig{
@Bean
public MyService myService(){
return new MyServiceImpl();
}
}
4. 注入方式
- 构造器注入
- setter注入
5 .实战:依赖注入的例子
- 消息服务接口和实现类
public interface MessageService {
String getMessage();
}
public class MessageServiceImpl implements MessageService {
private String username;
private int age;
public MessageServiceImpl(String username, int age) {
this.username = username;
this.age = age;
}
@Override
public String getMessage() {
return "Hello World!" + "\nusername is " + username + ",age is " + age;
}
}
- 打印器类
public class MessagePrinter {
final private MessageService messageService;
public MessagePrinter(MessageService messageService) {
this.messageService = messageService;
}
public void printMessage() {
System.out.println(this.messageService.getMessage());
}
}
- 配置文件
<!--定义bean,并使用构造器注入-->
<bean id="messageServiceImpl" class="com.spring.quickstart.MessageServiceImpl">
<constructor-arg name="username" value="Tom"/>
<constructor-arg name="age" value="20"/>
</bean>
<bean id="messagePrinter" class="com.spring.quickstart.MessagePrinter">
<constructor-arg name="messageService" ref="messageServiceImpl"/>
</bean>
- 应用主类
public class MessageApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
MessagePrinter messagePrinter = context.getBean(MessagePrinter.class);
messagePrinter.printMessage();
}
}
6 .依赖注入详细配置
- 直接赋值
- 引用其他bean
- 内部bean
- 集合
- Null及空字符的值
- xml短域名空间
- 复合属性名称
7. IoC综合练习:Boss、Car、Meeting
-
Car:brand、color、parameter
image.png -
Boss:name、company、car、hobby
image.png -
Meeting:theme、List<Boss>
image.png
网友评论