Spring 常用配置、Bean
spring模块
Spring-Core:
Core包是框架的最基础部分,并提供依赖注入(Dependency Injection)管理Bean容器功能。
Spring-Context:(Spring核心容器<上下文模块>)
核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。
另外,这个模块提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持。
Spring-Aop:
Spring在它的AOP模块中提供了对面向切面编程的丰富支持。例如方法拦截器(method-interceptors)和切点(pointcuts),可以有效的防止代码上功能的耦合,这个模块是在Spring应用中实现切面编程的基础。Spring的AOP模块也将元数据编程引入了Spring。使用Spring的元数据支持,你可以为你的源代码增加注释,指示Spring在何处以及如何应用切面函数。
Spring-Dao:
使用JDBC经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭连接。Spring的JDBC和DAO模块抽取了这些重复代码,因此你可以保持你的数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层,解析数据库厂商特有的错误代码。
Spring-Web:
Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。利用Servlet listeners进行IOC容器初始化和针对Web的applicationcontext。
Spring Web MVC:
(Model-View-Controller)Spring为构建Web应用提供了一个功能全面的MVC框架。它提供了一种清晰的分离模型,在领域模型代码和web form之间。并且,还可以借助Spring框架的其他特性。
Spring-ORM:
关系映射模块,ORM包为流行的“关系/对象”映射APIs提供了集成层,包括JDO,Hibernate和iBatis(MyBatis)。通过ORM包,可以混合使用所有Spring提供的特性进行“对象/关系”映射,方便开发时小组内整合代码。
配置bean
- 配置形式:基于 XML 文件的方式;基于注解的方式
- Bean 的配置方式:通过全类名(反射)、通过工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean
- IOC 容器 BeanFactory & ApplicationContext 概述
- 依赖注入的方式:属性注入;构造器注入
- 注入属性值细节
- 自动转配
- bean 之间的关系:继承;依赖
- bean 的作用域:singleton;prototype;WEB 环境作用域
- 使用外部属性文件
- spEL
- IOC 容器中 Bean 的生命周期
- Spring 4.x 新特性:泛型依赖注入
在 Spring 的 IOC 容器里配置 Bean
- 在 xml 文件中通过 bean 节点来配置 bean
- id:Bean 的名称。
在 IOC 容器中必须是唯一的
若 id 没有指定,Spring 自动将权限定性类名作为 Bean 的名字
id 可以指定多个名字,名字之间可用逗号、分号、或空格分隔
Spring 容器
- 在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前, 必须对它进行实例化. 只有在容器实例化后, 才可以从 IOC 容器里获取 Bean 实例并使用.
- Spring 提供了两种类型的 IOC 容器实现.
- BeanFactory: IOC 容器的基本实现.
- ApplicationContext: 提供了更多的高级特性. 是 BeanFactory 的子接口.
- BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合都直接使用 ApplicationContext 而非底层的 BeanFactory
- 无论使用何种方式, 配置文件时相同的.
ApplicationContext
- ApplicationContext 的主要实现类:
- ClassPathXmlApplicationContext:从 类路径下加载配置文件
- FileSystemXmlApplicationContext: 从文件系统中加载配置文件
- ConfigurableApplicationContext 扩展于 ApplicationContext,新增加两个主要方法:refresh() 和 close(), 让 ApplicationContext 具有启动、刷新和关闭上下文的能力
- ApplicationContext 在初始化上下文时就实例化所有单例的 Bean。(spring的Bean默认是单例)
- WebApplicationContext 是专门为 WEB 应用而准备的,它允许从相对于 WEB 根目录的路径中完成初始化工作
从 IOC 容器中获取 Bean
- 调用 ApplicationContext 的 getBean() 方法
依赖注入的方式
- Spring 支持 3 种依赖注入的方式
- 属性注入(常用)
- 构造器注入
- 工厂方法注入(很少使用,不推荐)
属性注入
- 属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象
- 属性注入使用 <property> 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 <value> 子节点指定属性值
- 属性注入是实际应用中最常用的注入方式
构造方法注入
- 通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。
- 构造器注入在 <constructor-arg> 元素里声明属性, <constructor-arg> 中没有 name 属性。
按索引匹配入参:
按类型匹配入参:
Spring常用配置示例:
Spring配置------命名空间:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" <!-- 默认bean命名空间 -->
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <!-- 固定格式 -->
xmlns:aop="http://www.springframework.org/schema/aop"<!-- AOP命名空间的scheme约束 -->
xmlns:context="http://www.springframework.org/schema/context"<!-- context命名空间的scheme约束 --> xsi:schemaLocation=" <!-- 上面各个scheme的location信息 -->
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd "> </beans>

Spring Beans主要配置:

<bean class="bean的完全限定名"
name/id="bean在容器内的唯一名称"
scope="bean的生命周期"
lazy-init="是否为延迟加载"
init-method="bean的setter被调用之后调用该方法进行初始化"
destroy-method="容器在销毁该Bean后的调用的方法"
abstract="是否为抽象Bean,spring对于抽象bean不产生实例,主要用于继承"
parent="父Bean的名称,会继承父Bean的属性,与Java的Class无任何关系"
factory-method="工厂方法的名字"
factory-bean="工厂Bean的名字"
depends-on ="依赖Bean的名字,保证初始化顺序。” >
<!-- Constructor-arg给属性赋值写法一 -->
<constructor-arg type="int" value="10"/>
<!-- Constructor-arg给属性赋值写法二 -->
<constructor-arg name="age" value="10"/>
<!-- Constructor-arg给属性赋值写法三 -->
<constructor-arg index="0" value="10"/> <!-- Properties给属性赋值写法一 -->
<property name="bean1">
<ref bean="另外一个bean的id"/>
</property>
<!-- Properties给属性赋值写法二 -->
<property name="bean1" ref="另外一个bean的id"/>
<!-- Properties给属性赋值写法三 -->
<property name="age" value="10"/>
</bean>

Spring 配置------context:
自动扫描包(默认设置)
<context:component-scan base-package="com.xxx.test" />
自动扫描包(含过滤器)

<context:component-scan base-package="cn.xxx.test" >
<!-- 根据注解(包含) -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/>
<!-- 根据aspectJ语法,一般用于AOP -->
<context:include-filter type="aspectj" expression=""/>
<!-- 根据正则表达式(排除) -->
<context:exclude-filter type="regex" expression=""/>
</context:component-scan>

<!-- 注解支持 -->
<context:annotation-config/>
激活Spring对class的注解检测,该配置会向Spring 容器注册一些BeanPostProcessor用于处理注解,
如:AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、
PersistenceAnnotationBeanPostProcessor 和 RequiredAnnotationBeanPostProcessor
比如要使用@AutoWired注解,需要向Spring注册如下的bean :
<bean class="org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor "/>
如果要使用@Required的注解,就必须注册如下bean:
<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>
而使用context:annotation-config相当于简化了操作。
另外如果配置了context:component-scan 则同样具备了注解检测的功能,此种情况下可以移除context:annotation-config
Spring 配置------AOP:
一些基本概念:
- 方面(Aspect):即切面,一个关注点的模块化,这个关注点实现可能另外横切多个对象。
- 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
- 通知(Advice):在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”、“after”和“throws”通知。
- 切入点(Pointcut):指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点,例如,使用正则表达式。
- 引入(Introduction):添加方法或字段到被通知的类。Spring允许引入新的接口到任何被通知的对象。
- 目标(Target):包含连接点的对象,也被称作被通知或被代理对象。
- 代理(Proxy):AOP框架创建的对象,包含通知。在Spring中,AOP代理可以是JDK动态代理或CGLIB代理。
- 编织(Weaving):组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。
AOP的xml配置项:

<bean id="myadvice" class="cn.test.MyAdvice" />
<bean id="targetclass" class="cn.test.aop.TargetClass" /> <aop:config>
<aop:pointcut expression="execution(* cn.test.aop.*.*(..))" id="pt" />
<aop:aspect ref="myadvice">
<aop:before method="beforeAdvice" pointcut-ref="pt" />
<aop:after method="afterAdvice" pointcut-ref="pt" />
<aop:around method="aroundAdvice" pointcut-ref="pt"/>
</aop:aspect>
</aop:config>

使用注解的方式实现AOP(示例):

@Component
@Aspect
public class MyAdvice2 { //拦截cn.test.spring.aop包下所有类的所有方法
final String exp="execution(* cn.test.spring.aop.*.*(..))"; @Before(exp)
public void beforeAdvice(){
System.out.println("before advice2");
} @After(exp)
public void afterAdvice(){
System.out.println("after advice2");
} @AfterReturning(exp)
public void afterRetAdvice(){
System.out.println("after return advice2");
}
@Around(exp)
public void aronudAdvice(ProceedingJoinPoint jp){
System.out.println("start arround advice2");
try {
jp.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("after arround advice2");
}
}

Spring 配置------MVC:
对web.xml文件的配置项:

<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Spring Web配置 -->
<listener>
<listenerclass>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
<!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/applicationContext.xml</param-value>
</context-param>

对spring配置文件的相关配置项:

<mvc:annotation-driven />
<context:component-scan base-package="cn.spring.test" />
<!-- 如果当前请求为“/”时,则转发到“index”视图 -->
<mvc:view-controller path="/" view-name="forward:index" /> <!-- 静态资源映射 -->
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
<mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
<mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
<mvc:resources mapping="images/**" location="/WEB-INF/images/" />
<!-- 当上面要访问的静态资源不存在与上面的配置中时,则根据此配置来访问 -->
<mvc:default-servlet-handler /> <!-- 支持上传文件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize"> <value>xxx</value></property>
<property name="defaultEncoding"> <value>UTF-8</value></property>
</bean> <!-- jsp视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/jsps/" />
<property name="suffix" value=".jsp" />
</bean>

文件上传示例代码:

@RequestMapping("/upload")
@ResponseBody
public String fileUpload(@RequestParam("formFile") MultipartFile formFile) throws IOException {
String fileContent=new String(formFile.getBytes());
//write to local file
return "code:0";
}

参考:尚硅谷 -- Spring.pptx。
spring模块说明:https://blog.csdn.net/qq_42773863/article/details/81462360。
spring常用配置示例:https://www.cnblogs.com/zffenger/p/5808031.html。
Spring 常用配置、Bean的更多相关文章
- Spring常用配置使用示例
上篇介绍了Spring配置的基本情况,本篇介绍Spring常用配置具体如何使用.关于基础的配置,比如Configuration之类的就不示例,主要示例相对用的比较多同时可能比较复杂的标签或属性. 1) ...
- Spring常用配置
----------------------------------------------------------------------------------------------[版权申明: ...
- Spring常用配置示例
Spring 是一款Java平台的开源框架,是为解决企业级应用程序开发的复杂性而创建的,通过良好的分层架构让开发人员能够专注于业务逻辑的开发. Spring框架是一个分层架构,由不同的模块组成,构成s ...
- Spring 注解配置Bean
一.使用注解配置Bean 1.注解 在类定义.方法定义.成员变量定义前使用.其简化<bean>标签,功能同<bean>标签.格式为: @注解标记名. 2.组件扫描 Spring ...
- 5.spring:注解配置 Bean
在classpath中扫描组件 组键扫描:能够从classpath下自动扫描,侦测和实例化具有特定注解的组件 特定的组件包括: ->@Componment:基于注解,标识一个受Spring管理的 ...
- spring常用管理bean注解
spring提供了多个注解声明Bean为spring管理的Bean @Controller 声明此类是一个MVC类,通常与@RequestMapping一起使用 @Controller @Reques ...
- spring FactoryBean配置Bean
概要: 实例代码具体解释: 文件夹结构 Car.java package com.coslay.beans.factorybean; public class Car { private String ...
- Spring Boot实战笔记(三)-- Spring常用配置(Bean的初始化和销毁、Profile)
一.Bean的初始化和销毁 在我们的实际开发的时候,经常会遇到Bean在使用之前或之后做些必要的操作,Spring对Bean的生命周期操作提供了支持.在使用Java配置和注解配置下提供如下两种方式: ...
- Spring常用配置(二)
OK,上篇博客我们介绍了Spring中一些常见的配置,上篇博客中介绍到的都是非常常见的注解,但是在Spring框架中,常见的注解除了上篇博客提到的之外,还有许多其他的注解,只不过这些注解相对于上文提到 ...
随机推荐
- 探索 ASP.Net Core 3.0系列三:ASP.Net Core 3.0中的Service provider validation
前言:在本文中,我将描述ASP.NET Core 3.0中新的“validate on build”功能. 这可以用来检测您的DI service provider是否配置错误. 具体而言,该功能可检 ...
- Hbase 多条件查询
/** * 获得相等过滤器.相当于SQL的 [字段] = [值] * @param cf 列族名 * @param col 列名 * @param val 值 * @return 过滤器 */ pub ...
- 洛谷 P2656 (缩点 + DAG图上DP)
### 洛谷 P2656 题目链接 ### 题目大意: 小胖和ZYR要去ESQMS森林采蘑菇. ESQMS森林间有N个小树丛,M条小径,每条小径都是单向的,连接两个小树丛,上面都有一定数量的蘑菇.小胖 ...
- 用Java开发的【智能语音开发板MEGA ESP32AI】
有点激动 ~ ~ ~ 新鲜出炉,用视频看看效果哦 我们新研发出世的语音开发板MEGA ESP32AI,来看看吧,有点腻害哦!!!先演示下功能语音控制开关等.播报天气 戳下面链接看视频哦? MEGA E ...
- idea中的后缀补全
IDEA有个很牛逼的功能,那就是后缀补全(Postfix Completion),这个功能可以通过后缀来使用代码补全进行模板式地补全语句,如遍历循环语句(for.foreach).使用 String. ...
- centos6系统资源限制
1.限制用户CPU使用资源 /etc/security/limits.conf #主配置文件 /etc/security/limits.d/ #子模块配置文件 新建一个普通用户,并查看默认资源限制 [ ...
- 刨树根,抓住redis 进行七连问
追着 redis 进行七连问 Hello Redis 有几个问题想请教你 Hello,Redis! 我们相处已经很多年了,从模糊的认识到现在我们已经深入结合,你的好我一直都知道也一直都记住,能否在让我 ...
- Linux文本文件——管理文本的命令
Linux文本文件——管理文本的命令 摘要:本文主要学习了在Linux中管理文本的命令. cat命令 cat命令用来显示文本文件的内容,也可以把几个文件内容附加到另一个文件中,即连接合并文件,是Con ...
- synchronized和volatile使用
synchronized和volatile volatile :保证内存可见性,但是不保证原子性: synchronized:同步锁,既能保证内存可见性,又能保证原子性: synchronized实现 ...
- SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错
SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错 BP,试图创建一个新的vendor code, 角色是ZGM001, Grouping是G001, ...