【Spring】容器

注意点: 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的方式实现

使用srping注解开发

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/>

Spring的优点

1.Spring是一个开源的免费的框架(容器)!

2.Spring是一个轻量级的,非入侵式的框架!

3.控制反转(IOC),面向切面编程(AOP)!

4.支持事务的处理,对框架整合的支持!

总结一句话:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!

使用Java的方式配置Spring

我们现在完全不适用Spring的xml配置了,全全交给Java来做

JavaConfig 是Spring的一个子项目,在Spring4之后,它成为了一个核心功能!

10、代理模式

​ 为什么要学习代理模式?因为这就是SpringAOP的底层!【SpringAOP和SpringMVC】

代理模式的分类:

1.静态代理 2.动态代理

10.1 静态代理

角色分析:

1.抽象角色:一般会使用接口或者抽象类来解决

2.真实角色:被代理的角色

3.代理角色:代理真实角色,代理站务室角色后,我们一般会做一些负数操作

4.客户:访问代理对象的人!

代码步骤:

1.接口

2.真实角色

3.代理角色

4.客户端访问代理角色

代理模式的好处:

1.可以使真实角色的操作更加纯粹!不用去关注一些公共业务

2.公共也就是交给代理角色!驶向了业务的分工!

3.公共业务发生扩展的时候,方便集中管理!

缺点:

1.一个真实角色就会产生一个代理角色;代码量会翻倍-开发效率会变低。

10.2动态代理

动态代理和静态代理角色一样

动态代理的代理类是动态生成的,不是我们直接写好的!

动态代理分为两大类:基于接口的动态代理,基于类的动态代理

基于接口-------JDK动态代理【我们在这里使用】

基于类:Cglib

Java字节实现:javasist

需要了解连个类:Proxy 代理,InvocationHandler 调用处理程序

10.3 AOP实现方式一

横切关注点:跨越应用程序多个木块的方法或功能,即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点,如日志,安全,缓存,事务等等…

切面(ASPECT):横切关注点 被木块华的特殊对象,即,它是一个类。

通知(Advice):切面必须要完成的工作,即,它是类中的一个方法。

目标(Target):被通知对象。

代理(Proxy):向目标对象应用通知之后创建的对象。

切入点(PointCut):切面通知执行的“地点”的定义。

连接点(JointPoint):与切入点匹配的执行点。

10.4 aop实现方式二

10.5 aop实现方式三(注解实现)

11、声明事务

事务ACID原则:

原子性 一致性 隔离性 (多个业务可能操作同一个资源,防止数据损坏)

持久性(事务一点提交,无论系统发生什么问题,结果都不会再被影响,被持久化地写到存储器中)

你可能感兴趣的:(spring,java,后端)