一.Spring的定义:
spring是一个以IOC(控制反转)和AOP(面向切面编程)为内核的框架。
二.理解IOC:
在面向对象传统编程方式中,获取对象的方式通常是用new关键字主动创建一个对象。spring中的IOC方式对象的生命周期由spring框架中的IOC容器管理,直接从IOC容器中获取一个对象,控制权从应用程序交给了IOC容器。
三.理解依赖注入
由IOC容器在运行期间动态第将某种依赖关系注入对象之中。例如:讲对象B注入赋值给对象A的成员变量。
四.IOC与依赖注入的联系
依赖注入与控制反转(IOC)是对同一件事情的不同角度的描述。 1.依赖注入是从应用程序的角度描述的,即应用程序依赖容器创建并注入应用程序所需的外部资源(即外部对象)。 2.控制反转是从容器的角度描述的,即容器控制应用程序,由容器反向地向应用程序注入应用程序所需的外部资源(即外部资源)。
五.IOC/DI的实现
IOC通常有setter注入和构造方法注入两种实现方式 1.setter注入: (1)编写接口UserDaoService.java
package com.ssm.service;
public interface UserService {
public void login();
}
(2)编写接口实现类UserDaoServiceImpl.java
package com.ssm.service.impl;
import com.ssm.dao.UserDao;
import com.ssm.service.UserService;
public class UserServiceImpl implements UserService{
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void login(){
this.userDao.login();
System.out.println("UserService login");
}
}
(3)编写接口UserDao.java
package com.ssm.dao;
public interface UserDao {
public void login();
}
(4)编写接口实现类UserDaoImpl.java
package com.ssm.dao.impl;
import com.ssm.dao.UserDao;
public class UserDaoImpl implements UserDao{
@Override
public void login() {
System.out.println("UserDao login");
}
}
(5)编写配置文件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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<bean id="UserDao" class="com.ssm.dao.impl.UserDaoImpl"/>
<bean id="UserService" class="com.ssm.service.impl.UserServiceImpl">
<property name="userDao" ref="UserDao"/>
</bean>
</beans>
(6)编写测试类DITest.java
package com.ssm.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ssm.service.UserService;
public class DITest {
public static void main(String[] args) {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserService userService=(UserService) applicationContext.getBean("UserService");
userService.login();
}
结果为:
UserDao login
UserService login
2.构造器注入
(1)编写接口UserDaoService.java
package com.ssm.service;
public interface UserService {
public void login();
}
(2)编写接口实现类UserDaoServiceImpl.java(注意观察和上面的这个文件的区别)
package com.ssm.service.impl;
import com.ssm.dao.UserDao;
import com.ssm.service.UserService;
public class UserServiceImpl implements UserService{
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void login(){
this.userDao.login();
System.out.println("UserService login");
}
}
(3)编写接口UserDao.java
package com.ssm.dao;
public interface UserDao {
public void login();
}
(4)编写接口实现类UserDaoImpl.java
package com.ssm.dao.impl;
import com.ssm.dao.UserDao;
public class UserDaoImpl implements UserDao{
@Override
public void login() {
System.out.println("UserDao login");
}
}
(5)编写配置文件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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<bean id="UserDao" class="com.ssm.dao.impl.UserDaoImpl"/>
<bean id="UserService" class="com.ssm.service.impl.UserServiceImpl">
<constructor-arg index="0" ref="UserDao"/>
</bean>
</beans>
(6)编写测试类DITest.java
package com.ssm.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ssm.service.UserService;
public class DITest {
public static void main(String[] args) {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserService userService=(UserService) applicationContext.getBean("UserService");
userService.login();
}
结果为:
UserDao login
UserService login