Spring学习
##Bean的作用域
1.singleton 单列模式,Spring默认的就是单列。
2,scope="prototype " 原型模式。。。每次出来的都是新的对象。
3. requeset ,session application 在web中用到。
Bean的自动装配
三种装配方式
1.xml中显示配置
2.在Java中显示配置
3.隐式的自动装配bean
注解自动装配
注意点 xml的约束,context
配置注解的支持
@autowried
@autowried是按照类型,@resource是按照名字的
这里@AutoWired注解默认应该是Bytype类型查找,找不到再Byname找
扫描摸个包下的注解,
开启注解扫描
@commpoment 组件 放在类上边 这个类被Spring管理。
dao层一般使用@respoistry
service @service
controller @controller
@scope 单列
==## 代理模式
Spring aop的底层是代理模式。
代理模式的分类:
动态代理:
静态代理:
静态代理
角色分析:
- 抽象角色:一般使用接口或者抽象对象类来解决。
- 真实角色:被代理的角色
- 代理角色:代理真是角色
- 客户:访问代理对象的角色
代理模式的有点:
可以使真实角色的操作更加纯粹
公共业务交给代理角色
公共业务发生扩展的时候,方便管理。‘
缺点:一个真实角色会产生一个代理角色,代码量会翻倍,开发效率降低
动态代理
动态代理和静态代理角色一样
动态代理分为两大类:基于接口的动态代理,基于类的动态代理
- 基于接口的 JDK的动态代理
- 基于类:cglib
- Java字节码 javassist
//接口
public interface Rent {
void rents();
}
实现类
public class host implements Rent {
@Override
public void rents() {
System.out.println("收房租");
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
代理类
public class proxyA implements InvocationHandler{
//被代理的接口
private Rent rent;
public void setRent(Rent rent) {
this.rent = rent;
}
//生成得到代理类
public Object getProxy() {
return Proxy.newProxyInstance(this.getClass().getClassLoader(), rent.getClass().getInterfaces(), this);
}
//调用代理程序
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//动态代理的本质是反射
syso(签合同)
Object result = method.invoke(rent, args);
syso(付费)
return result;
}
}
测试类
public class test {
public static void main(String[] args) {
host h=new host();
proxyA ph=new proxyA();
ph.setRent(h);
Rent proxy = (Rent)ph.getProxy();
proxy.rents();
//实际是先去调用的invoke方法 所以可以在invoke方法中写自己的代码来增强代码的可读性
}
}
需要了解的两个类
proxy 代理类
invocationhandler 调用处理程序
一个动态代理类代理的是一个接口一般就是对应一类事物。
AOP
理解
方式一:使用Spring的API接口
方式二:自定义实现
方式三:使用注解实现
spring整合mybatis
声明式事务
持久化的概念:将数据以某种形式存储到数据库中。
事务acid的原则:
- A:原子性 事务式最小的单位,是不可再分割的。
- C:一致性:
- I:隔离性:多个业务共同操作一个资源,防止数据破坏。
- D:持久性:事务一旦提交,无论系统发生什么问题,结果都不会被影响,持久化到数据库。
spring中的事务
- 声明式事务:本质AOP
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="mySessionFactory"/>
</property>
</bean>
- 编程式事务:需要在编程中进行事务管理。