注意点: p命名和c命名空间不能直接使用,需要导入xml约束!
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
jdk1.5 支持的注解,spring2.5 就支持注解了!
The introduction of annotation-based configuration raised the question of whether this approach is “better” than XML.
要使用注解须知:
1.导入约束:context约束
2.配置注解的支持:context:annotation-config/
@Autowired
直接在属性上使用即可!
使用Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC(spring) 容器中存在,符合我们的名字byName。
如果@Autowired自动装配的韩静比较复杂,自动装配无法通过一个注解完成的时候,我们使用@Qualifier(value=“xxx”)去装配@Autowired的使用,指定一个唯一的。
@Component:组件,放在类上,说明这个类被Spring管理了,就是Bean!
小结:
@Resource和Autowired的区别
1.都是用来自动装配的,都可以防砸属性字段上
2.@Autowired 通过byname的方式实现,而且必须要求这个对象存在
3.@Resourece 默认通过byname的方式实现,如果找不到哦啊名字,则通过byType实现,如果两个都找不到的情况下,就报错
4.一个是java注解,一个是spring注解
5.执行顺序不同:@Autowired 通过byname的方式实现
1.在使用spring4之后,要使用注解开发,必须要保证导入aop的包导入
使用注解需要导入context约束,增加注解的支持!
2.属性如何注入
3.衍生的注解
@Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层!
1)dao {@Repository}
2)service{@service}
3)controller{@Controller}
这四个注解功能都是一样的,都是代表将某个类注册到Spring中,装配Bean
4.自动装配
@Autowired:自动装配通过类型、名字
@Nullable: 字段标记这个注解,说明这个字段可以为null
@Resource:自动装配通过名字、类型
5.作用域
@Scope(“singleton”)
6.小结
xml与注解:
1.xml更加万能,适用于任何场合
2.注解,不是每个类使用不了,维护相对复杂
xml与注解最佳实践:
xml用来管理bean;
注解只负责完成属性的注入;
<context:component-scan base-package="com.gwl"> context:component-scan>
<context:annotation-config/>
1.Spring是一个开源的免费的框架(容器)!
2.Spring是一个轻量级的,非入侵式的框架!
3.控制反转(IOC),面向切面编程(AOP)!
4.支持事务的处理,对框架整合的支持!
总结一句话:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!
我们现在完全不适用Spring的xml配置了,全全交给Java来做
JavaConfig 是Spring的一个子项目,在Spring4之后,它成为了一个核心功能!
为什么要学习代理模式?因为这就是SpringAOP的底层!【SpringAOP和SpringMVC】
代理模式的分类:
1.静态代理 2.动态代理
角色分析:
1.抽象角色:一般会使用接口或者抽象类来解决
2.真实角色:被代理的角色
3.代理角色:代理真实角色,代理站务室角色后,我们一般会做一些负数操作
4.客户:访问代理对象的人!
代码步骤:
1.接口
2.真实角色
3.代理角色
4.客户端访问代理角色
代理模式的好处:
1.可以使真实角色的操作更加纯粹!不用去关注一些公共业务
2.公共也就是交给代理角色!驶向了业务的分工!
3.公共业务发生扩展的时候,方便集中管理!
缺点:
1.一个真实角色就会产生一个代理角色;代码量会翻倍-开发效率会变低。
动态代理和静态代理角色一样
动态代理的代理类是动态生成的,不是我们直接写好的!
动态代理分为两大类:基于接口的动态代理,基于类的动态代理
基于接口-------JDK动态代理【我们在这里使用】
基于类:Cglib
Java字节实现:javasist
需要了解连个类:Proxy 代理,InvocationHandler 调用处理程序
横切关注点:跨越应用程序多个木块的方法或功能,即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点,如日志,安全,缓存,事务等等…
切面(ASPECT):横切关注点 被木块华的特殊对象,即,它是一个类。
通知(Advice):切面必须要完成的工作,即,它是类中的一个方法。
目标(Target):被通知对象。
代理(Proxy):向目标对象应用通知之后创建的对象。
切入点(PointCut):切面通知执行的“地点”的定义。
连接点(JointPoint):与切入点匹配的执行点。
事务ACID原则:
原子性 一致性 隔离性 (多个业务可能操作同一个资源,防止数据损坏)
持久性(事务一点提交,无论系统发生什么问题,结果都不会再被影响,被持久化地写到存储器中)