个人总结一些spring知识点

Spring

IOC(控制反转)

1. 把程序创建对象的控制权转移到第三方。

2. 满足依赖倒转原则

  • 谁控制谁:在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IOC 容器后,则直接由 IoC 容器来控制。所以“谁控制谁”,当然是 IoC 容器控制对象。
  • 控制什么:控制对象。
  • 为何是反转:没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转。
  • 哪些方面反转了:所依赖对象的获取被反转了。

3. IOC的实现方式有依赖注入

  • 依赖注入有3种方式:set方法注入,构造方法注入,其他方式注入。配置文件加载后,bean已经创建好了,放入spring容器里面了

  • Set方式注入:
    String注入:直接value注入
    对象注入:用ref注入
    数组[]注入:<array></value></value></array>\注入
    List注入:<list></value></value></list>\注入
    Map注入:<map><entry key="" value=""/></map>\注入
    Set集合注入:<set></value></value></set>\注入

4. Bean的作用域(默认是单例)

  1. singleton:单例
    生命周期:
    创建:配置文件一读就创建
    活着:只要容器没有关闭,就一直活着
    死了:容器关闭
  2. prototype:原型模式,每次getBean都会产生一个新的对象
    生命周期:
    创建:什么时候使用,什么时候创建
    活着:对象一直被用,就一直活着
    死了:太久没用被垃圾回收机制回收
  3. request: http请求,每次请求都会创建一个新的bean
  4. session: 每次会话创建新的
  5. application:
  6. websocket:

5. Spring种Bean的三种装配方式

  1. 在xml种显示的配置(前面的都是这种)
  2. 在java中显示配置:在bean标签中 加入autowire属性,value可以是byName,byType。
  3. 隐式的自动装配bean(重要)
  • 开启注解支持
    @Autowired(require=true):自动注入,假如为false,则该属性可以为空,默认是通过byName实现
    @Resource:也是自动装配,默认通过byname,如果找不到名字,则通过byType
    @Qualifier(value=“dog222”):直接指定找哪个注入
    @Nullable:字段标记了该注解,说明可以为空

6. 注解开发

要使用注解开发,必须导入aop的包,并指定要开启注解扫描的包
@Component:在类上加,标明该类是一个组件
@Repository,@Service,@Controller:是@Component衍生的注解,在dao,service,controller使用
@Scope:标明作用域
@Value(“laowang”):在属性上加,相当于给属性注入值

7. javaConfig

@Configuration:在类使用,表明是配置类
@Bean:在配置类中方法使用,相当于写了bean标签

AOP(面向切面编程)

1. 静态代理

实现同一个接口,然后对其增加附属操作即可

2. 动态代理(CGlib)

动态代理类实现InvocationHandler接口
调用proxy类静态方法new一个proxy对象

3. AOP的实现方式

  • 方式一:使用springAPI接口
    1.让日志类实现***Advice接口,具体作什么附属操作
    2.在xml中配置bean
    3.配置aop
    先配置切入点< aop:pointcut id="" expression=“expression(***)” >
    在配置做什么增强,相当于把bean和这个切点作绑定
    < aop:advisor advice-ref=“上面的bean的id”,pointcut-ref=“切点id”>

  • 方式二:自定义类配置切面实现AOP(比方式一多了切面配置)
    1.写一个日志类,具体作什么附属操作
    2.在xml中配置bean
    3.配置aop
    先配置切面:< aop:aspect ref=“日志类”></aop:aspect>
    在切面中配置切点:< aop:pointcut id=" " expression=“expression(***)” >
    接着配置通知,在方法前,后调用: < aop:before method=“before” pointcut-ref=“切点id” >

  • 方式三:使用注解实现
    1.在切面类加上@Compnent,@Aspect注解
    2.方法加上@Beafore,@After(参数是切入点表达式expression=“expression(***)”)
    3.开启注解支持

4. 声明式事务

  1. 配置一个bean:事务管理器
  2. 配置事务通知:
    < tx:advice id=“txAdvice” transaction-manager=“事务管理器id”>
    3.在事务通知里配置哪些方法需要开启事务:
    < tx:method name:“add”>
    4.最后用方式一方式配置事务的切入

猜你喜欢

转载自blog.csdn.net/laowang__/article/details/105274259
今日推荐