spring 学习路线梳理(一)
spring 整体架构
学习思路:
spring ioc (控制反转):
控制反转的出现是为了方便代码的解藕。没有ioc的时候都需要自己去new。如果一个接口有多个实现类,每次换实现类的时候需要重新编译,现在交给spring 的容器帮助我们管理。需要什么实现类,去找spring的容器取就可以了(这个就是DI注入)。
xml 实现代码:读取配置,封装成 BeanDefinition 创建bean
1.启动的是一个spring boot项目
2.创建 dao,server ,controller , applicationContext.xml
3.在 applicationContext.xml 配置需要spirng帮我们创建的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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--> 1.通过 xml 配置的方式将刚才创建的dao 和 service 的实现类 告诉 Spring,帮我们创建bean <-->
<bean id="loginDao" class="com.drawing.springsecuritydemo.dao.impl.LoginDaoImpl"/>
<bean id="loginService" class="com.drawing.springsecuritydemo.service.impl.LoginServiceImpl"/>
</beans>
4.获取容器,从容器中拿到spring帮我们创建的bean
//@SpringBootApplication
public class SpringSecurityDemoApplication {
public static void main(String[] args) {
//SpringApplication.run(SpringSecurityDemoApplication.class, args);
ClassPathXmlApplicationContext xct
= new ClassPathXmlApplicationContext("applicationContext.xml");
ILoginService bean = (ILoginService) xct.getBean("loginService");
String login = bean.login();
System.out.println(login);
}
}
DI(依赖注入)
注入我们需要的类
setter注入
1.在service中注入dao ,通过set方法注入
@Slf4j
public class LoginServiceImpl implements ILoginService {
public ILoginDao iLoginDao;
//通过set方法 注入 需要的dao
public void setiLoginDao(ILoginDao iLoginDao) {
this.iLoginDao = iLoginDao;
}
@Override
public String login() {
log.info("{}","login validator send service");
iLoginDao.login();
return "login success !!!";
}
}
2.在xml配置文件中定义需要注入到 service中的引用
3.查看配置后调用 运行的结果:
构造器注入
1.在service中注入dao ,通过构造器注入
2.在xml配置文件中定义需要注入到 service中的引用
scope 的类型:
bean的实例化方式(spring通过什么方式帮我们创建的对象)
1.构造方法:
调用main方法获取对象的时候,调用LoginDaoImpl的构造方法
2. 静态方法创建的bean
定义工厂中的静态方法
配置调用的工厂方法
bean 初始化和销毁之前触发的方法
要实现 InitializingBean, DisposableBean 两个接口中的方法
@Slf4j
public class LoginServiceImpl implements ILoginService , InitializingBean, DisposableBean {
public ILoginDao iLoginDao;
//通过set方法 注入 需要的dao
public void setiLoginDao(ILoginDao iLoginDao) {
this.iLoginDao = iLoginDao;
}
@Override
public String login() {
log.info("{}","login validator send service");
iLoginDao.login();
return "login success !!!";
}
//销毁之前的操作
@Override
public void destroy() throws Exception {
System.out.println("destroy");
}
//初始化之前的操作
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet");
}
}
同时要关闭容器
打印的结果: