学shiro学个开头来学spring 起码先把一些配置学懂了才能回去学shiro
IOC与AOP
AOP的核心:源代码的无关性 加入的逻辑代码和业务代码是无关的两部分代码 降低耦合度
如注解 @Before @After @Around都能体现AOP
IOC 所谓控制反转 是获得依赖对象的过程被反转了 不用new了 只负责使用 不创建对象 在配置文件中注入 所以也叫DI 依赖注入 把对象之间的依赖关系组织起来
下边是慕课截得ppt
也可以说是面向接口编程
我照着慕课做了个java工程
spring所需jar包下载地址
https://download.csdn.net/download/qq_35653822/10929880
估计也就培训班老师会让我们把一堆jar粘到lib下了 上班了都用maven了
spring注入
两种方式 构造注入和设置注入
两种方式在xml中的名称和在对应类中的环境变量名称要一直
构造注入在xml中用<constructor-arg/> 在对应类中有构造方法给成员变量赋值
设置注入在xml中用<property/> 在对应类中有set方法给成员变量赋值
二者只能选其一
scope
scope="singleton" 默认的
scope="prototype" 每次请求都会创建新的实例
想看是不是同样实例的一个方法 可以打印 this.hashcode 比较
初始化和销毁
初始化 在<bean/>中配置 init-method 或者在<beans/>中配置 default-init-method bean在初始化时会执行对应的方法 如果两个都存在 <bean/>中init-method会覆盖beans中default-init-method 如init-method="init" 初始化时 就会执行对应bean中的init方法 如果不存在会报错
销毁 同上 <bean/>中配置destroy-method <beans/>中配置default-destroy-method
Aware结尾的接口 可以对相应资源进行操作
aware英文是感知的意思
比如实现BeanNameAware可以获得xml中配置对应bean的属性 如下链接
https://www.jianshu.com/p/c5c61c31080b
实现ApplicationContextAware可以调用application.getbean方法获得容器中的值
自动装配
1.no:默认不自动装配 而是通过设置注入或构造注入
2.byname 在<beans/>中 default-autowire="byname"或在<bean/>中autowire="byname" 注意<bean/>中id 声明set方法和属性
public class AutoWiringService {
private AutoWiringDAO autoWiringDAO;
public void setAutoWiringDAO(AutoWiringDAO autoWiringDAOb) {
System.out.println("setAutoWiringDAO");
this.autoWiringDAO = autoWiringDAOb;
}
public void say(String word) {
this.autoWiringDAO.say(word);
}
}
3.bytype 同byname在<beans/>中 default-autowire="bytype "或在<bean/>中autowire="bytype " 注意<bean/>中id 声明set方法和属性
4.constructor:构造注入 在<beans/>中 default-autowire="constructor"或在<bean/>中autowire="constructor" 这个<bean>可以没有id 在调用类中通过构造方法注入
<?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"
default-autowire="constructor">
<bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService" autowire="constructor"></bean>
<bean id = "autoWiringDAO" class="com.imooc.autowiring.AutoWiringDAO" ></bean>
</beans>
public class AutoWiringService {
private AutoWiringDAO autoWiringDAO;
public AutoWiringService(AutoWiringDAO autoWiringDAO) {
System.out.println("AutoWiringService");
this.autoWiringDAO = autoWiringDAO;
}
public void say(String word) {
this.autoWiringDAO.say(word);
}
}
@Component通用注解 可用于任何bean @Repository @Service @Controller @Configuration都用@Component注解过
@Autowired自动装配 不用再xml里配置<constructor-arg> 或 <property>了 也不用在类中写set方法或者构造器赋值
@Bean作用于方法 标示创建一个bean
注解可以代替xml配置 比如 @PostConstruct 可以代替 init-method @PreDestroy 代替 destroy-method
@After方法相当于finally方法 最后方法抛异常也会执行
@Pointcut 可以用 && || !组合