spring体系

一、spring从体系架构上分为

1. 基本组件框架组合:Spring Framework

2.专项领域应用组件:Spring Portfolio

这个Spring Portfolio主要应用满足于特定的的应用场合:包括了spring Security/spring boot等等

这里主要阐述基本组件框架组合:Spring Framework。

二、Spring Framework

spring框架的发布版本包括了20个不同的模块。每个模块有3个JAR文件。这20个模块依据所属功能可以划分为6类不同的功能!如下图:

1. spring核心容器

    核心容器是spring框架最核心的部分,它管理着spring应用中bean的创建、配置和管理等等主要为ID依赖注入功能!该功能是spring的两大核心之一!

2. spring的AOP模块

这个模块是spring应用系统中开发切面的基础

3. 数据访问和集成:

     主要用于访问数据持久层(数据库数据等)。包括了简化的JDBC、DAO及框架型ORM如:Mybatis和Hibernate

4. Web和远程调用

    此部分解决了web应用的MVC模型。所以这里集合了spring-MVC框架。另外还支持了用于分布式场景的REST API标准等等!

5. Instrumentation:提供JVM的代理

6. 测试:这是spring的测试单元模块,可以模拟用户的请求场景等测试!

三、spring的两个核心内容

    DI【依赖注入】和AOP【面向切面】

1.  spring DI【依赖注入】

A. 简化POJO老式Java开发,实现解耦!

B. 注入的方式有很多,最常见几种注入方式【装备方式】:推荐用自动配置的机制!

C. 一个完整的注入流程:

C1. 由servlet容器(tomcat)的web.xml或者测试单元的@RunWith(SpringJunit4ClassRunner.class)创建spring容器(分为bean工厂+多种spring上下文)(常用的XmlWebApplicationContext:用于加载XML方式的bean注入和AnnotationConfigWebApplicationContext:用于javaConfig注入方式!),并通过spring容器结合配置文件创建各种各样的组件bean!多数使用上下文作为spring容器多一点!所以下方以上下文为例!

C2. 通过spring上下文对象去加载配置文件(JavaConfig的@Configuration或者XML配置都可以)

C3. spring上下文通过配置文件发现(扫描也好配置也好)了bean之后并创建bean,然后查看在哪注入,就进行组装和注入了!并创建这些组件bean之间的关联关系!

1)借助JavaConfig+@Bean完成显式注入:

    a. 带有@Bean注解的方法可以采用任何必要的Java功能来产生bean实例。这种方式主要应用于注入第三方库的场景,因为我们没办法在别人的代码里面去声明一个带有我们要注解的bean!

    b.这种方式直接编写一个配置类(javaConfig)@Configuration注解:表示这是一个配置类!

    c.然后在这个配置类中添加方法(这个方法可以是构造方法或者是Setter方法)并带上注解@Bean!这个方法返回的是一个实例化new对象。通过这个方法返回一个对象,即可完成一次注入!

    d.@Bean("id")可以给bean定义一个ID

    e.bean的单例性,可将同一个bean实例注入到任意数量的其他bean中!

    使用Javaconfig的时候,要创建一个带有@Configuration注解的类!

2)xml配置:

    a.要创建一个XML文件,并以<beans>元素为根

    b.创建<bean>元素【等同于javaConfig的@Bean注释方法!注解】

    c. 填写id和class(指定到对应的java类)

a/b/c完成了一个原材料Bean的定义!

<bean id="compactDisc" class="soundsystem.SgtPeppers"/>

    d. 定义另外一个<bean>配置类Bean(等同于JavaConfig配置类),然后在这个使用者中通过constructor-arg(这是)引用材料bean的id

    d1.构造方式【引入ref】注入

<bean id="cdPlayer" class="soundsystem.CDPlayer">
   <constructor-arg ref="compactDisc" />
<bean/>

    d2.构造方式字面量【value属性】注入[这里用了spring的c命名空间等同于constructor-arg]

<bean id="compactDisc">
  class="soundsystem.BlankDisc"
  c:_tittle="THIS IS TITTLE"
  c:_artist="ARTIST NAME"
<bean/>

这个方式注入的时候可以通过<set><list>元素注入多个参数!

e. Setter注入方式!

在使用者类没有显式的编写构造函数的时候(只有默认隐式)推荐使用此方式注入!Setter方式的注入需要在<bean>元素标签中使用<property>注入到compactDisc的compactDisc属性中(setCompactDisc()Setter方法)(如下例子):property的命名空间是p!Setter同样有ref引用方式和字面量<value>方式!

<bean id="cdPlayer" class="soundsystem.CDPlayer">
   <property name="compactDisc" ref="compactDisc"/>
<bean/>

3) 自动化装配bean(推荐)

A. 创建被发现扫描的bean类

@Component注解和@Named

:表明该类会作为组件,并告知spring为这个类创建bean。我们知道以上javaConfig装配或者XML装配也好都会给相关的bean命名ID。当然用@Component(id)和@Named(id)也是可以的。

B. 配置启动扫描类:

a. @Configuration+@ComponentScan注解:这个注解能在spring中启动组件扫描,默认会扫描与之同一个package包下的所有类和子包。当然这个启动扫描也可以指定到特定的包或几个包!

@Configuration的作用同上述Javaconfig方法装配bean一样表明这个类是一个配置类

b. 使用XML来启动扫描:<context:component-scan>元素

C. @Autowired完成注入:

如何加载配置:@ContextConfiguration注解—》加载刚 @Configuration+@ComponentScan注解的bean启动扫描——》扫描到同一个包下的所有@Component注解的bean!——》通过@Autowired注解在属性上完成bean的注入!

@Autowired(或者java的规范注入:@Inject)在使用类中的构造方法或者Setter方法中或者其他方法上加入@Autowired,并在方法的参数中传入要注入的bean作为参数即可完成自动装配的注入!【有点类似javaConfig方式的@Bean注解,但是有区别,@Bean是返回一个new实例,而@Autowired是通过参数传入】

4)三种装配方法对比

javaConfig方式XML方式自动化装配
配置Bean类+材料Bean类

创建一个以<beans>

元素为跟的XML文件

配置&扫描类+被发现的材料bean类

无需创建材料类bean!

创建<bean>基本材料bean,

指明ID和包名

创建一个可被发现的材料bean:

@Component注解和@Named

@Configuration注解定义一个配置类创建<bean>配置类bean!

@Configuration定义配置类且

@ComponentScan注解:启动组件扫描

或者使用XML定义扫描

<context:component-scan>

在统一个配置类中通过@Bean注解的方法

返回一个new实例完成注入

通过<constructor-arg>构造方式

和<property>的Setter方式完成注入

默认自动扫描所配置的扫描类的

同一个包下的所有包和类.最后通过

@Autowired注解的方法以

要引入的对象属性参数形式自动注入!

主要应用于注入第三方jar库的场景配置式的编程方式!推荐!

2. spring AOP面向切面编程

主要应用于日志、事务、安全等不需要参与到主业务的代码的工作,悄悄的去监督主业务的代码!

关键词:

连接点:所监控对象类的所有接口

切   点:所需要关注的特定的入口。在spring AOP中要使用AspectJ的切点表达式语言来定义切点!

execution(* concert.Performance.perform(..))

通   知:触发器

切   面:以@Aspect注解的类! 切点和通知的结合:一个切面有五个触发器:

@After/@AfterReturning/@AfterThrowing/@Around/@Before

织   入:把切面真正的启动开始执行监控工作!

引   入:给监控对象偷偷的“私自”添加新的方法而不打扰对象本身!

 

AOP如何跟注入的Bean配合呢?

四、spring应用于WEB(spring MVC)

 

由web.xml(或者其他方法)配置DispatcherServlet,当DispatcherServlet启动时,会创建spring应用上下文。这个上下文会同普通spring上下文一样去加载配置类的bean(java:@EnableWebMVC)或者XML(特殊的命名方式)。在配置类或者配置XML里要声明视图解析器、组件扫描器、静态资源处理等等。这样就和普通的spring过程一样了!有个区别是使用spitter.web包的@Controller(控制类)一系列注解代替普通的扫描注解@Component-Scan!

1. @Controller注解同@Component注解的方法一样!是为了让扫描发现自己!

2. @RequestMapping注解到控制类方法上:声明了他们所需要处理的请求

3.@RequestMapping分解级别!

4. mock Spring MVC来来模拟执行HTTP请求!从这个模拟中可以看出要不要返回视图是看请求方的意愿了!

5. JSP如何访问spring后台返回的Model数据呢?通过JSTL!

6. 接收请求的输入:@RequestParam注解获取HTTP中输入参数!如果没有对应的value值就会给定默认值!这个@RequestParam可以放在方法参数中,也可以放在方法中修饰变量!

7. RPC和URL的区别?理想情况下应该通过URL的形式发起请求,因为能完整的知道资源的路径。而如果RPC(域名地址+?参数=dd...)通过参数去访问资源就隐藏了中间的地址了!

8. 接收占位符!

9. 带有重定向式的视图:redirect:前缀!
10. 校验注解:直接通过注解去校验。而不用自己动手写校验方法!

11. 重定向:P165

12.  传递负责的数据!

五、spring所支持的业务框架

1. spring web flow:适合元素按规定的流程运行!

2. spring security:解决spring的安全:认证、拦截、过滤等等!

六、 spring ORM:Hibernate/Mybatis...

七、 spring REST API

八、 spring boot

九、spring Email

十. SSM

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3697586/blog/1815327

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值