文章目录
一,什么是Spring IOC/ID
Spring IOC(控制反转)/DI(依赖注入)是面向对象的一种设计理念,用来降低程序代码之间的耦合度。
IOC/ID的核心是ApplicationContext容器,容器接管了对象的创建。只要类注册在容器中,容器初始化以后就会为所有类创建单例对象,代码中通过getBean(“beanname”)就可以拿到对象。
二,如何通过注解的方式实现spring IOC/ID
1. 创建applicationContext.xml文件,
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--容器扫描指定包目录下的类文件,此处容器扫描com.leon.pojo下的所有类-->
<context:component-scan base-package="com.leon.pojo"/>
/beans>
2. 在需要创建对象的类中加入标注。根据对象的不同选择标注元件@Compoment,@Repository, @Service, @Controller。如果类中包含引用类型,则引用类型也需要标注为元件,且在引用类型前需要加自动链接@Autowired
@Component
public class User {
public int userID;
public String userName;
}
@Component
public class Group {
private int groupId;
private int groupName;
@Autowired
private User user;
}
@Autowired采用按类型匹配的方式为属性自动装载合适的依赖对象,即容器会查找和属性类型想匹配的Bean组件,并自动为属性注入。
如果到不到相匹配的Bean组件,Spring容器会跑出异常。此时如果依赖不是必须的,为避免抛出异常,可以将required的属性设置为false:
@Autowired(required=false)
如果对类中集合类型的成员变量或方法入参使用@Autowired注解,Spring 会将容器中所有和集合元素类型匹配的Bean组件都注入进来。
@Autowired(required=false)
private List<Job> toDolist;
3. 创建容器对象,调用容器的getBean方法,类型强转以后就可以得到对象。
@Test
public void test1(){
ApplicationContext app= new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) app.getBean("user");
Group group= (Group) app.getBean("group");
}