成都 地铁 建设 网站,胶州网站建设效果,网易企业邮箱如何申请注册,汕头招聘网目录
1. 什么是spring#xff0c;它能够做什么?
2. 什么是控制反转(或依赖注入)
3. AOP的关键概念
4. 示例
4.1 创建工程
4.2 pom文件
4.3 spring配置文件
4.4 示例代码
4.4.1 示例1
4.4.2 示例2 #xff08;abstract#xff0c;parent示例#xff09;
4.4.3 使…
目录
1. 什么是spring它能够做什么?
2. 什么是控制反转(或依赖注入)
3. AOP的关键概念
4. 示例
4.1 创建工程
4.2 pom文件
4.3 spring配置文件
4.4 示例代码
4.4.1 示例1
4.4.2 示例2 abstractparent示例
4.4.3 使用有参数构造方法创建javaBean
4.4.4 init-method指定bean的初始化方法
4.4.5 复杂属性的配置
5. 多配置文件
6. 与web集成
6.1 集成配置
6.2 获取配置的Bean 1. 什么是spring它能够做什么?
Spring是一个开源框架它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言任何Java应用都可以从Spring中受益。
Spring项目出发点
目的提供一种贯穿始终的解决方面将各种专用框架整合成一个连贯的整体框架简化企业级应用的开发有点像粘合剂鼓励最佳实践 例如spring将“针对接口编程”的成本降到了最小非侵入性 应用对象尽量避免依赖框架IoC和AOP是避免依赖的关键技术统一配置 好的框架应该让应用配置灵活且统一易于测试 使单元测试尽可能简单可扩展
简单来说Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
2. 什么是控制反转(或依赖注入)
控制反转(IoCInversion of Control)IoC用白话来讲就是由容器控制程序之间的依赖关系而非传统实现中由程序代码直接操控。这也就是所谓“控制反转”的概念所在(依赖)控制权由应用代码中转到了外部容器控制权的转移是所谓反转。 IoC还有一个另外的名字“依赖注入 (DIDependency Injection)” 即由容器动态的将某种依赖关系注入到组件之中。
3. AOP的关键概念
连接点(Joinpoint)程序执行过程中明确的点如方法的调用或者异常的抛出.目标(Target)被通知(被代理)的对象通知(Advice)在某个特定的连接点上执行的动作同时Advice也是程序代码的具体实现例如一个实现日志记录的代码(通知有些书上也称为处理)代理(Proxy)将通知应用到目标对象后创建的对象(代理目标通知),请注意只有代理对象才有AOP功能而AOP的代码是写在通知的方法里面的切入点(Pointcut)多个连接点的集合定义了通知应该应用到那些连接点。(也将Pointcut理解成一个条件 此条件决定了容器在什么情况下将通知和目标组合成代理返回给外部程序)适配器(Advisor)适配器通知(Advice)切入点(Pointcut)
4. 示例
4.1 创建工程
创建一个web工程并转换为web3.1 详细步骤可参见“maven”课件
4.2 pom文件
依赖配置如下
propertieshibernate.version5.2.12.Final/hibernate.versionmysql.driver.version5.1.44/mysql.driver.versionspring.version5.2.6.RELEASE/spring.versionstruts2.version2.5.13/struts2.versionslf4j.version1.7.7/slf4j.versionlog4j.version2.9.1/log4j.versiondisruptor.version3.2.0/disruptor.versionjunit.version4.12/junit.versionservlet.version4.0.1/servlet.versionjstl.version1.2/jstl.versionstandard.version1.1.2/standard.versiontomcat-jsp-api.version8.5.20/tomcat-jsp-api.version/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependency!-- spring 相关 --dependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-orm/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-web/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-aop/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-aspects/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion${spring.version}/version/dependency!-- 数据库驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.driver.version}/version/dependency!--4. log配置Log4j2 Slf4j --!-- slf4j核心包 --dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion${slf4j.version}/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdjcl-over-slf4j/artifactIdversion${slf4j.version}/versionscoperuntime/scope/dependency!--用于与slf4j保持桥接 --dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion${log4j.version}/versionexclusionsexclusionartifactIdslf4j-api/artifactIdgroupIdorg.slf4j/groupId/exclusion/exclusions/dependency!--核心log4j2jar包 --dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion${log4j.version}/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion${log4j.version}/version/dependency!--web工程需要包含log4j-web非web工程不需要 --dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-web/artifactIdversion${log4j.version}/versionscoperuntime/scope/dependency!--需要使用log4j2的AsyncLogger需要包含disruptor --dependencygroupIdcom.lmax/groupIdartifactIddisruptor/artifactIdversion${disruptor.version}/version/dependency!--5. other --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion${junit.version}/versionscopetest/scope/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion${servlet.version}/versionscopeprovided/scope/dependency!--6. jstl --dependencygroupIdjavax.servlet.jsp.jstl/groupIdartifactIdjstl/artifactIdversion${jstl.version}/version/dependencydependencygroupIdtaglibs/groupIdartifactIdstandard/artifactIdversion${standard.version}/version/dependency!-- 7. jsp自定义标签依赖 (必须与tomcat的版本一致) --dependencygroupIdorg.apache.tomcat/groupIdartifactIdtomcat-jsp-api/artifactIdversion${tomcat-jsp-api.version}/versionscopeprovided/scope/dependency/dependencies
注 该依赖配置不仅包含了spring同时也包含了hibernatestrutsmysql驱动等。
4.3 spring配置文件
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:aophttp://www.springframework.org/schema/aopxmlns:contexthttp://www.springframework.org/schema/context xmlns:txhttp://www.springframework.org/schema/txxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd/beans
4.4 示例代码
4.4.1 示例1
1 Student
public class Student {private String name;public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString() {return Demo [name name ];}}
2 spring.xml 配置文件
bean iddemo classorg.lisen.springdemo.model.Demoproperty namenamevalue张三/value/property/bean
配置文件说明
id在容器中查找Bean的id(唯一、且不能以/开头)classbean的完整类名name在容器中查找Bean的名字(唯一、允许以/开头、允许多个值多个值之间用逗号或空格隔开)scope:(singleton|prototype)默认是singleton singleton: 单例模式, 在每个Spring IoC容器中一个bean定义对应一个对象实例 prototype 原型模式/多例模式, 一个bean定义对应多个对象实例parent指定一个父bean(必须要有继承关系才行)abstract: 将一个bean定义成抽象bean(抽象bean是不能实例化的),抽象类一定要定义成抽象bean,非抽象类也可以定义成抽象bean 注 在这里配置的name属性为简单的String属性可以直接使用value进行配置。另外可以直接使用value设置的如下 8基础数据String3个sql java.util.Date java.sql.Date java.sql.Time java.sql.Timestamp 3 通过Spring的ApplicationContext获取Bean
public class SpringDemo {public static void main(String[] args) {ApplicationContext cxt new ClassPathXmlApplicationContext(spring.xml);Student demo (Student)cxt.getBean(demo);System.out.println(demo);}}
4.4.2 示例2 abstractparent示例
1 Person
public class Student extends Person {private String name;public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString() {return Demo [name name ];}}
2 Student
public class Student extends Person {private String name;public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString() {return Demo [name name ];}}
3 配置文件
bean idstudent classorg.lisen.springdemo.model.Student parentpersonproperty namenamevalue张三/value/property/beanbean idperson classorg.lisen.springdemo.model.Person abstracttrueproperty namephonevalue139751878778/value/property/bean
4 通过Spring的ApplicationContext获取Bean
public class SpringDemo {public static void main(String[] args) {ApplicationContext cxt new ClassPathXmlApplicationContext(spring.xml);Student student (Student)cxt.getBean(student);System.out.println(student.getName());System.out.println(student.getPhone());}}
4.4.3 使用有参数构造方法创建javaBean
constructor-arg
1 Worker
public class Worker extends Person {private String workName;public Worker(String workName) {this.workName workName;}public String getWorkName() {return workName;}public void setWorkName(String workName) {this.workName workName;}}
2配置文件
bean idworker classorg.lisen.springdemo.model.Worker parentpersonconstructor-arg nameworkNamevalue王小/value/constructor-arg!-- 第二种方式constructor-arg index0value王小/value/constructor-arg--/bean
3 通过Spring的ApplicationContext获取Bean
public class SpringDemo {public static void main(String[] args) {ApplicationContext cxt new ClassPathXmlApplicationContext(spring.xml);Student student (Student)cxt.getBean(student);System.out.println(student.getName());System.out.println(student.getPhone());//构造函数注入Worker worker (Worker)cxt.getBean(worker);System.out.println(worker.getWorkName());}}
4.4.4 init-method指定bean的初始化方法
修改上面的Student类加入一个init方法注意该方法不能有参数
public class Student extends Person {private String name;public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString() {return Demo [name name ];}//init方法不能有参数public void init() {System.out.println(Student init ....);}}
2 修改Student类对应的配置文件
bean idstudent classorg.lisen.springdemo.model.Student parentperson init-methodinitproperty namenamevalue张三/value/property/bean
3 运行原来的测试用例会发生后台打印“Student init ....“表示init-method正常调用。
4.4.5 复杂属性的配置
1 JavaBean属性注入
bean idstudent classorg.lisen.springdemo.model.Student parentperson init-methodinitproperty namenamevalue张三/value/propertyproperty nameaddr refaddr//beanbean idaddr classorg.lisen.springdemo.model.Addrproperty namecityvalue长沙/value/property/bean
java部分代码比较简单请根据配置文件自行完成。
2List或数组
声明属性
private int[] arr;private List list;
配置文件 property namelistlistvalue123/valuevalue456/valuevalue789/valuevalueasd/value/list/property
3Map
private Map map;
配置文件 property namemapmapentry keyaa value123/entry keybb value456/entry keycc value789//map/property
4.Properties
private Properties prop; 配置文件 property nameproppropsprop keyddqwer/propprop keyeetyu/propprop keyffiop/prop/props/property
5. 多配置文件
系统一般会被分成多个模块可以为每个模块配置一个配置文件便于管理在版本控制软件中也可以减少冲突
spring-a.xml 假设为a模块的配置文件
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:aophttp://www.springframework.org/schema/aopxmlns:contexthttp://www.springframework.org/schema/context xmlns:txhttp://www.springframework.org/schema/txxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsdbean idstudent classorg.lisen.springdemo.model.Student parentperson init-methodinitproperty namenamevalue张三/value/propertyproperty nameaddr refaddr//beanbean idaddr classorg.lisen.springdemo.model.Addrproperty namecityvalue长沙/value/property/beanbean idperson classorg.lisen.springdemo.model.Person abstracttrueproperty namephonevalue139751878778/value/property/beanbean idworker classorg.lisen.springdemo.model.Worker parentpersonconstructor-arg nameworkNamevalue王小/value/constructor-arg!-- 第二种方式constructor-arg index0value王小/value/constructor-arg--/bean/beans spring.xml 为总的spring配置文件 在总配置文件中导入其他模块即可。
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:aophttp://www.springframework.org/schema/aopxmlns:contexthttp://www.springframework.org/schema/context xmlns:txhttp://www.springframework.org/schema/txxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsdimport resourcespring-a.xml//beans
6. 与web集成
6.1 集成配置
在web.xml中加入如下配置 context-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:spring.xml/param-value/context-paramlistenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listener
6.2 获取配置的Bean
/*** 用于简化Bean的获取.* * ApplicationContextAware接口* 实现了这个接口的bean当spring容器初始化的时候会自动的将ApplicationContext注入进来* * author Administrator*/
public final class SpringBeanUtil implements ApplicationContextAware {private SpringBeanUtil() {}private static ApplicationContext cxt;Overridepublic void setApplicationContext(ApplicationContext appContext) throws BeansException {cxt appContext;}/*** 根据Bean的id来获取Bean对象* param id 配置文件中的bean的id属性* return Object*/SuppressWarnings(unchecked)public static T T getBean(String id) {return (T)cxt.getBean(id);}}
配置文件 bean
classorg.lisen.springdemo.util.SpringBeanUtil/