IOC(Inversion Of Control)控制反转
意思为,以前创建一个对象需要通过new的方式来实现,现在通过IOC把创建对象的过程交由Spring进行管理。
DI 依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。
1.构建两个对象Person和Item。
public class Item { private String itemName = "item1111"; private String itemPrice; public void ItemOut(){ System.out.println("Hello I am Item."); } public String getItemName() { return itemName; } public void setItemName(String itemName) { this.itemName = itemName; } public String getItemPrice() { return itemPrice; } public void setItemPrice(String itemPrice) { this.itemPrice = itemPrice; } }
public class Person { private String name = "person11111"; private int age; private Item item; public Item getItem() { return item; } public void setItem(Item item) { this.item = item; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void la(){ System.out.println("lalalalalala"); } }
2.建立ApplicationContext.xml文件(该文件为Spring配置文件)
<?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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean id="person" class="Pojo.Person"> <property name="name" value="Rex"/> <!-- <property name="item" ref="item"/>--> </bean> <bean id="item" class="Pojo.Item"> <property name="itemName" value="item1"></property> </bean> </beans>先引入约束。
再通过表现Bean创建对象,并通过DI方式为对象注入属性。
3.新建Test来测试
public class IOCTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Person person = (Person)context.getBean("p"); person.getItem().ItemOut(); System.out.println(person.getItem().getItemName()+" "+person.getName()); } }
4.运行结果
通过注解方式来实现AOP
1.构建两个对象Person和Item。
@Component("p") /*该注解相当于xml中的Bean,p相当于bean中的id */ public class Person { private String name = "person11111"; private int age; @Resource(name="i") private Item item; public Item getItem() { return item; } public void setItem(Item item) { this.item = item; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void la(){ System.out.println("lalalalalala"); } }
@Component("i") /*该注解相当于xml中的Bean,p相当于bean中的id */ public class Item { private String itemName = "item1111"; private String itemPrice; public void ItemOut(){ System.out.println("Hello I am Item."); } public String getItemName() { return itemName; } public void setItemName(String itemName) { this.itemName = itemName; } public String getItemPrice() { return itemPrice; } public void setItemPrice(String itemPrice) { this.itemPrice = itemPrice; } }
重点:
(1)类上面可以用注解@Component来创建对象,并交由Spring进行管理。括号中的值相当于是id值。
(2)创建好以后,在person类中可以创建一个Item,并通过自动注入的方式new出对象。@autowired或者@Resource(name=“id”)
2.在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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <context:annotation-config/> <!--开启自动注入注解@autowired--> <context:component-scan base-package="Pojo"/> <!--Bean注解扫描开启-->
3.通过Test获取对象。
public class IOCTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Person person = (Person)context.getBean("p"); person.getItem().ItemOut(); System.out.println(person.getItem().getItemName()+" "+person.getName()); } }IOC全部流程搞定。