文章目录
- IOC (Inverse of Control 控制反转)
- DI (Dependency Injection 依赖注入)
- 入门案例 --- 组件、注册
- 第一步、引入依赖
- 第二步、编写配置文件 ---xml
- 从官网查看 xml 格式 然后保存为模板
- 注册组件 ---在配置文件 xml 文件中写的
- 单元测试
IOC (Inverse of Control 控制反转)
控制:实例的生成
反转:控制权的反转,实例生成权的反转 → 由应用程序反转给Spring
容器:Spring容器、IOC容器,放的是实例,这些实例在Spring容器中通常以单例的形式管理起来 → 生成并管理实例的地方
class UserServlet extends HttpServlet{
//应用程序直接获得实例
UserService userService1 = new UserServiceImpl();
//实例通过Spring来获得
UserService userService2 = Spring.getInstance(UserService.class);
}
DI (Dependency Injection 依赖注入)
应用程序依赖于Spring容器,Spring容器中包含了应用程序运行所必须的资源(实例)
Spring容器注入给应用程序(应用程序接收来自于Spring容器的资源)
入门案例 — 组件、注册
组件:Spring容器管理的实例叫组件
注册:注册组件,Spring容器管理实例
第一步、引入依赖
Spring的依赖5+1
spring-core\context\aop\expression\beans + jcl(日志包)
junit (测试用)
lombok @Data(set get toString) 用到
第二步、编写配置文件 —xml
从官网查看 xml 格式 然后保存为模板
官网 https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#core.appendix.xsd-schemas-context
注册组件 —在配置文件 xml 文件中写的
<!--注册组件 → UserServiceImpl (这个是我们编写的类名) -->
<!--id属性:组件在Spring容器中唯一标识-->
<!--class属性:全限定类名 ctrl + alt + shift + c-->
<bean id="userService" class="com.tz_xuge.service.UserServiceImpl"/>
单元测试
@Test
public void test() {
// 初始化 容器
// 能够加载在classpath下的配置文件 configLocation 配置位置
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
// 从容器中取出 组件(实例) -> 用接口来接受 组件(实例)
// 方法一 根据 id
UserService userId = (UserService) applicationContext.getBean("UserId");
// 方法二 根据 class 但是如果 有不同的类 继承同一个接口 则不能用 because 用接口来接受
// UserService applicationContextBean = applicationContext.getBean(UserService.class);
// applicationContextBean.sayHello();
//方法三 根据 id 和 class
// UserService applicationContextBean = applicationContext.getBean("UserId", UserService.class);
// applicationContextBean.sayHello();
// userId 就是类UserServiceImpl 的对象
userId.sayHello();
}