Spring框架SSM之IOC详解
作者:北城以北Iris
本文介绍了Spring框架中IOC(控制反转/依赖注入)的两种实现方式,每种方式结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
Spring框架之IOC
1.Spring框架搭建
在pom文件中引入jar包
<properties>
<spring.version>4.0.2.RELEASE</spring.version>
</properties>
<!-- spring框架包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>2.IOC(控制反转/依赖注入)
将程序的控制权从代码本身转移到外部容器
组件化的思想:分离关注点,使用接口,不再关注实现
依赖的注入:将组件的构建和使用分开
2.1在配置文件中进行控制反转和依赖注入
dao层
/**
* 显示信息
*/
public interface UserDao {
public void show() ;
}
public class UserDaoImpl implements UserDao {
@Override
public void show() {
System.out.println("输出UserDaoImpl信息");
}
}service层
public interface UserService {
/**
* 显示信息
*/
public void show() ;
}
public class UserServiceImpl implements UserService {
@Setter
private UserDao userDao;
@Override
public void show() {
userDao.show();
}
}在resources文件夹下创建一个spring.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/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">
</beans>xml配置文件
<!-- 配置userDao bean--> <bean id="userDao" class="com.hz.dao.impl.UserDaoImpl"></bean> <bean id="userService" class="com.hz.service.impl.UserServiceImpl"> <!-- 配置userDao属性,ref引用userDao bean --> <property name="userDao" ref="userDao"></property> </bean>
读取配置文件并运行
//使用ClassPathXmlApplicationContext读取配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserService userService =(UserService) context.getBean("userService");
userService.show();2.2使用注解的形式实现
@Component:实现Bean组件的定义
@Repository([实例化名称]) :用于标注DAO类 默认使用当前类的类名(首字母小写)作为bean的别名
@Service([实例化名称]) :用于标注Service业务类 默认使用当前类的类名(首字母小写)作为bean的别名
@Autowired+@Qualifier(“userDao”)等价于@Resource(name = “userDao”)
dao层
/**
* 显示信息
*/
public interface UserDao {
/**
* 删除学生
* @param id
*/
public int delStudent(Integer id);
}
@Repository
public class UserDaoImpl implements UserDao {
@Override
public int delStudent(Integer id) {
System.out.println("删除id为"+id+"的学生");
return 0;
}
}service层
public interface UserService {
/**
* 删除学生
* @param id
*/
public int delStudent(Integer id);
}
@Service
public class UserServiceImpl implements UserService {
//@Resource(name = "userDaoImpl")
@Autowired
//@Qualifier("userDaoImpl")
private UserDao userDao;
@Override
public int delStudent(Integer id) {
userDao.delStudent(id);
return 100;
}
}注:JDK17把@Resource废除,如果需要使用此注解需导入jar包
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.2</version>
</dependency>在配置文件中开启注解
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 配置组件扫描,扫描com.hz.dao和com.hz.service和com.hz.aop包下的类 -->
<context:component-scan base-package="com.hz.dao,com.hz.service"/>
</beans>读取配置文件
//使用ClassPathXmlApplicationContext读取配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
//因为@Repository默认使用当前类的简单类名(首字母小写)作为bean的别名,所以使用getBean("userServiceImpl")获取对象
UserService userService =(UserService) context.getBean("userServiceImpl");
userService.delStudent(1001);2.3@Autowired和@Resource区别
- Resource 按照名称依赖注入,如果没有对应则按照类型注入
- Autowired 按照依赖类型注入
到此这篇关于SSM--Spring框架之IOC的文章就介绍到这了,更多相关spring框架ioc内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
