Spring的核心概念-IoC
“控制反转”
控制反转(Inversion of Control,IoC),也称为依赖注入(Dependency Injection,DI)
Hello,Spring!
1.编写一个HelloSpring类
/**
* 第一个Spring,输出"Hello,Spring!"。
*
*
*/
public class HelloSpring {
// 定义who属性,该属性的值将通过Spring框架进行设置
private String who = null;
/**
* 定义打印方法,输出一句完整的问候。
*/
public void print() {
System.out.println("Hello," + this.getWho() + "!");
}
/**
* 获得 who。
*
* @return who
*/
public String getWho() {
return who;
}
/**
* 设置 who。
*
* @param who
*/
public void setWho(String who) {
this.who = who;
}
}
2.编写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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<!-- 通过bean元素声明需要Spring创建的实例。该实例的类型通过class
属性指定,并通过id属性为该实例指定一个名称,以便在程序中使用 -->
<bean id="helloSpring" class="cn.springdemo.HelloSpring">
<!-- property元素用来为实例的属性赋值,此处实际是调用setWho()方法
实现赋值操作 -->
<property name="who">
<!-- 此处将字符串"Spring"赋值给who属性 -->
<value>Spring</value>
</property>
</bean>
</beans>
3.添加测试方法
public class HelloSpringTest {
@Test
public void helloSpring() {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
HelloSpring helloSpring = (HelloSpring) context.getBean("helloSpring");
helloSpring.print();
}
}
通过Hello,Spring!的例子Spring会自动接管配置文件中Bean的创建
和为属性赋值的工作。
相对于“控制反转”,“依赖注入”的说法也许更容易理解一些,即由容器负责把组建所“依赖”的具体对象“注入”给组件,从而避免组件之间以硬编码的方式耦合在一起。
IoC的注解
import org.springframework.stereotype.Component;
@Component("userDao")
public class UserDaoImpl implements UserDao{
//方法
}
在Service的实现类中注解
@Service("userService")
public class UserServiceImpl implements UserService{
@Autowired
@Qualifier("userDao")
//或者用
@Resource(name="userDao")//Auto和Q都可省去
private UserDao userDao;
//方法
}
修改applicationContext配置文件
//在bean中加入代码
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
//beans中的代码
<!-- 扫描 -->
<context:component-scan base-package="service,dao"/>