基本概念
一、IOC和DI
IOC:Inversion of Control–控制反转。
DI:Dependency Injection–依赖注入
其实两个表示同一个意思,只是角度不同罢了。
IOC 和DI 的本质就是将程序间相互依赖交给Spring容器来控制。如传统方式的调用外部对象时需要主动new一个对象出来,使用Spring后,new的工作就交给Spring容器来做,程序可以调用Spring的方法来直接使用外部对象,从而降低程序间的耦合度。
AOP
AOP:Aspect Oriented Programming–面向切面编程
就向早餐吃面包,把面包切成片,向每两片面包中间刷果酱、夹火腿。我们的程序就是面包,刷果酱和夹火腿的动作就是写好的重复性功能。
一句话解释就是写一个可复用的方法,哪里需要插哪里。
二、自动装配bean @Autowired
本节使用Srping Framwork 4
本节以Zoo类中引用Dog类和Pig类为例。
1.配置文件
自动装配bean:在Spring bean配置文件中添加配置:
<?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/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<context:component-scan base-package="com.nbrabbit.springStudy" />
<!-- <bean id="zoo" class="com.nbrabbit.springStudy.Zoo"></bean>
<bean id="dog" class="com.nbrabbit.springStudy.Dog"></bean>
<bean id="pig" class="com.nbrabbit.springStudy.Pig"></bean>
-->
</beans>
1.文件头部需要引入xsi中的内容
2.<context:component-scan base-package=“com.nbrabbit.springStudy” /> 表示Spring会自动扫描com.nbrabbit.springStudy包下的文件,遇到Spring注解时会自动将该类注册问bean,而无需在配置文件中写明(代码中的注释是传统的写法,需主动声明bean)。
2.Dog类和Pig类
@Component
public class Dog {
private String dogName = "dog";
@Override
public String toString() {
return "Dog [dogName=" + dogName + "]";
}
public String getDogName() {
return dogName;
}
public void setDogName(String dogName) {
this.dogName = dogName;
}
}
3.Zoo类
@Component
public class Zoo {
@Autowired
private Pig pig;
@Autowired
private Dog dog;
@Override
public String toString() {
return "Zoo [pig=" + pig + ", dog=" + dog + "]";
}
}
4.main方法
public class App
{
public static void main( String[] args )
{
ApplicationContext ctx = new ClassPathXmlApplicationContext("autowired.xml");
Zoo zoo = (Zoo)ctx.getBean("zoo");
System.out.println(zoo.toString());
}
}
5.执行main方法
结果:
6.说明
@Autowired 注解会自动将对象装配为bean,使用该注解时,可省去setter() 和getter()方法。
被装配的类需要使用 @Component 、@Service等进行注解