本文共 3358 字,大约阅读时间需要 11 分钟。
IOC(Inversion of Control,控制反转)的概念简单来说,就是将对象的创建和对象之间的调用过程交给Spring来管理。这种反转意味着你不再在代码中直接控制对象的生命周期,而是通过Spring的IOC容器来实现。
创建对象实例的控制权从代码中剥离到IOC容器控制,这种方式通过配置文件(如XML文件)来实现,侧重于原理的理解。
IOC的实现主要依赖于以下几个关键点:
例如:
Class clazz = Class.forName("com.example.MyClass"); MyClass instance = clazz.newInstance(); return instance; 在Spring中,XML配置文件是实现IOC的常用方式。以下是通过XML注入实现IOC的详细步骤:
<property>标签。示例:
<constructor-arg>标签。示例:
xmlns:p="http://www.springframework.org/schema/p"属性;在bean中添加p:name属性。示例:
在Spring中注入特殊类型属性(如空值、特殊符号、外部Bean等)可以通过以下方式实现:
空值注入:
特殊符号注入:
或者使用CDATA:
>]]>
外部Bean注入:
在Spring中注入对象集合(如List、Set、Map等)可以通过以下方式实现:
** Dept类**:
public class Dept { private List empList; public void setEmpList(List empList) { this.empList = empList; } } ** Emp类**:
public class Emp { private String eName; public void seteName(String eName) { this.eName = eName; } }XML配置:
Spring可以根据属性名称或类型进行自动装配。使用byType时,相同类型的Bean不能配置多个。
示例:
工厂Bean(FactoryBean)是Spring中一种特殊的Bean类型。其定义方式如下:
实现FactoryBean接口:
public class MyBean implements FactoryBean{ @Override public User getObject() throws Exception { User user = new User(); user.setName("张三"); return user; } @Override public Class getObjectType() { return null; } @Override public boolean isSingleton() { return false; } }
XML配置:
Spring提供了一系列注解(如@Component、@Service、@Controller、@Repository等)来简化XML配置,以下是使用注解实现IOC的示例:
Service注解:
@Service("userService") public class UserService { @Autowired private UserDao userDao; public void add() { userDao.update(); } }Controller注解:
@Controller public class MyController { @Autowired private MyService myService; @GetMapping("/test") public String test() { return myService.doSomething(); } }在Spring中,注解注入(@Autowired、@Qualifier、@Resource、@Value等)是实现属性注入的常用方式。
@Autowired注入:
@Autowired private UserDao userDao;
@Qualifier注入:
@Autowired @Qualifier(value = "userDaoImpl2") private UserDao userDao;
@Resource注入:
@Resource(name = "userDaoImpl") private UserDao userDao;
@Value注入:
@Value("${my.names}") private List names; 在Spring Boot项目中,可以通过注解的方式实现完全的注解开发:
配置类:
@Configuration @ComponentScan(basePackages = {"com.example"}) public class SpringConfig { }测试类:
@Test public void test() { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); UserService userService = context.getBean("userService", UserService.class); userService.add(); }通过以上方法,可以在Spring项目中实现IOC的核心功能。从简单的XML注入到复杂的注解开发,Spring为开发者提供了极为灵活和强大的配置方式。
转载地址:http://pis.baihongyu.com/