Java知识点
2021-11-19 15:02:28 18 举报
个人学习java spring 笔记 笔记内容来源于 B站 狂神说
作者其他创作
大纲/内容
依赖注入
构造器注入
可以注入有参构造的方法,通过坐标或对象名称来注入
Set方式注入【重点】
注入:bean对象中的所有属性,由容器来注入
依赖:bean对象的创建依赖于容器
拓展方式注入
我们可以使用p命名空间和c命名空间
p命名空间使用的setter方法注入
c命名空间使用的是construct方法注入
bean的作用域
单例模式(Spring默认机制)
原型模式-每次从容器中get时,都会产生一个新对象
其余的request、session、application这些只能在web开发中使用到
Bean的自动装配
自动装配是Spring满足bean依赖的一种方式!
Spring辉再上下文中自动寻找,并自动给bean装配属性!
Spring中三种装配的方式
在xml中显示的配置
在java中显示配置
隐式的自动装配【重要】
byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的是bean id!
byType:会自动在容器上下文中查找,和自己对象属性类别相同的bean!
小结:
byname的时候,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致!
bytype的时候,需要保证所有的bean的属性唯一,需并且这个bean需要和自动注入的属性的类型一致!
使用注解自动装配
使用注解须知:
导入约束:context约束
配置注解的支持:context/
@Autowired 直接在属性上使用注解!也可以在set方式上使用!
使用Autowired自动装配的环境比较复杂,自动装配无法通过一个注解【@Autowired】完成的时候,我们可以使用@Qualifier(value="xx")去配置@Autowired的使用,指定一个唯一的bean对象注入
小结:
@Resource和@Autowired 的区别
都是用来自动装配的,都可以放在属性字段上
两者都会使用bytype和byname去自动装配
@Autowired 先使用bytype @Resource 先使用byname
使用注解开发
bean
@Component 一般用于类名前,相当于把该类自动装配进Spring容器中。(默认id为小写)
属性如何注入
通过@Value(注入内容) 可以直接将值注入
衍生的注解
@Component 有几个衍生注解,我们在web开发中,会按照mvc三层架构!
dao【@Repository】
service【@Service】
controller【@Controller】
自动装配
@Autowired 自动装配通过类型、名字
@Nullable 字段标记了这个注解,说明这个字段可以为null
@Resource 自动装配通过名字、类型
作用域
@Scoper("作用域")
小结
xml与注解:
xml更加万能,适用于任何场合!维护简单方便
注解 不是自己类是用不了,维护相对复杂
xml与注解最佳实践:
xml用来管理bean
注解只负责完成属性的注入
我们在使用的过程中,只需要注意一个问题:必须让注解生效,就需要开启注解的支持
使用Java的方式配置Spring
我们现在要完全不适用Spring的xml配置了,全权交给Java来做!
JavaConfig是Spring的一个子项目,在Spring4之后变成了核心功能!
@Configuration 代表这是一个配置类,与之前的xml文件类似
@Bean 注册一个bean,就相当于xml文件中的一个bean标签 方法的名字是bean标签中的id属性 方法的返回值是bean标签中的class属性 在方法内部,返回要注入到bean的对象!
代理模式
静态代理
角色分析:
抽象角色:一般会用接口或者抽象类来解决
真实角色:被代理的角色
代理角色:代里真实角色,代里真实角色后,我们一般会做一些附属操作
客户:访问代理对象的人
代里模式的好处:
可以使真实角色的操作更加纯粹!不用去关注一些公共的业务
公共也就交给代理角色!实现了业务的分工!
公共业务发生扩展的时候,方便集中管理!
缺点:
一个真实角色就会产生一个代理角色;代码量会翻倍~开发效率会降低~
理解为:在想要增强功能时,为了防止改变原有代码,新增一个代理来调用原来的方法并在调用后增加功能。底层是反射
动态代理
角色分析和静态代理角色一样
动态代理的代理类是动态生成的,不是我们直接写好的
动态代理分为两大类:基于接口的动态代理,基于类的动态代理
基于接口——JDK动态代理
基于类:cglib
java字节码实现:javasist
需要了解的两个类:Proxy:代理,InvocationHandler:调用处理程序
InvocationHandler:调用处理程序 做增强
AOP理解
切入点(Pointcut)
词如其意,表明了要切入到哪里去。例如,[public] * com.xxx.service.UserService.*(..),就是切入的目的地,表示要在这个位置下的所有[public]方法中切入进去。
在登录时,需要添加一个验证功能,就可以通过AOP来在登录前增加一个验证的功能
连接点(Joinpiont)
现在我们已经知道了要切入到哪里去(切入点),但我们还不知道要在什么时候切入,此时就需要连接点来为我们表示。比如我们可以选择在一个方法被执行前、异常被抛出时等切入。通常情况,我们只需要在方法被执行时执行
建议(Advice)
使用注解实现AOP
收藏
收藏
0 条评论
下一页
为你推荐
查看更多