本篇只记录Spring功能的大概,详细内容会另开文章
Spring不同的配置方式
XML方式:1.x版本开始实现
基于注解方式:@Component等,2.x版本开始实现;该方式需要部分xml配置内容
Java方式配置:3.x版本开始实现;该方式相当于把xml配置文件改成了Java类
学习Spring建议使用XML方式配置,正式使用使用Java方式或注解方式
注解方式和xml方式、Java方式配置并不能算是同一个分类;应该说Spring配置方式有以下四种:纯XML方式(最开始的时候的模式,现在一般不用)、XML+注解、Java+注解、纯Java(这个一般不用)
所以对现在来说只有中间两种配置方式的差异;一般只有一些环境类的类需要直接配置声明Bean,和项目服务相关的大量类都使用注解模式
Spring IOC
Spring IOC即控制反转,用于解耦代码,便于移植
想要使用注解方式,需要在xml配置文件中添加以下配置自动扫描指定路径下的被注解的类
<context:component-scan base-package="cn.*"/>
<context:component-scan base-package="test.*"/>
或者使用Java配置方式时使用以下注解在配置类上
@ComponentScan("cn.*")
@ComponentScan("test.*")
声明Bean
XML
<bean id="myBean" class="cn.Test"/>
<bean class="cn.Test"/>
注解
此类注解用于声明一个Bean,一般放在类上,或者Java配置时放在配置类需要声明Bean的方法上
@Component:没有明确角色
@Service:业务层使用
@Repository:数据访问层使用
@Controller:展现层使用,在使用Spring MVC框架的时候前台url只与注解了这个的类进行绑定
以上注解在作为普通Bean的时候效果并没有非常大的差别,使用哪个都一样
在另外一个Bean中注入Bean
xml
<bean id="myBean" class="cn.Test"/>
<bean class="cn.Test1" p: myBean-ref="myBean"/>
其中myBean为Test1类的属性,属性类型为cn.Test;-ref为固定格式
注解
此注解一般放置于属性上,用于给指定属性(一般为类)自动注入对应类的Bean实例
@Autowired:Spring提供
@Inject:JSR-330提供
@Resouce:JSR-250提供
以上三种方式效果相同
Bean的Scope(作用范围)
作用范围配置在XML中为Bean的一个熟悉,在注解方式使用@Scope指定,默认值为singleton
singleton:一个容器只有一个Bean实例
prototype:每次调用新建一个Bean实例
request:Web项目中使用,每个HTTP request新加一个Bean实例
session:Web项目中使用,每个HTTP session新建一个Bean实例
globalSession:只在portal应用中使用,每个global HTTP session新建一个Bean实例(实际未使用过,不知道具体效果)
step:@StepScope,作用未明,先记着以后再查资料整理
Bean初始化和销毁方法配置
XML方式:init-method、destroy-method属性指定方法
Java配置方式:initMethod、destroyMethod
注解方式(方法上):JSR-250的@PostConstruct、@PreDestroy
根据不同情况实例化不同Bean
@Profile("xxx"):xxx为容器环境变量“spring.profiles.active”的值,一般测试中使用context.getEnvironment().setActiveProfiles("xxx")方式临时配置
@Conditional(xxx.class):xxx为实现org.springframework.context.annotation.Condition接口的类,用于判断是否使用该注解了的方式创建Bean实例
AOP(面向切面编程)
AOP的目的是解耦,使一组类共享相同行为
@Aspect:声明一个切面类
@PointCut:定义拦截规则
@After:定义被拦截方法执行前执行的方法,拦截规则可以使用@PointCut注解的方法,也可以自己声明
@Before:定义被拦截方法执行后执行的方法,拦截规则可以使用@PointCut注解的方法,也可以自己声明
@Around:定义被拦截方法执行时执行的方法,需要在方法中主动执行被拦截方法,拦截规则可以使用@PointCut注解的方法,也可以自己声明
Spring MVC
M:Spring的ModelAndView
V:jsp、html、freemarker等
C:@Controller注解的类
Spring MVC常用注解
@Controller:声明一个Controller的Bean,在Web项目web.xml文件的Spring主控Servlet会根据servlet-name查找对应的${servlet-name}-servlet.xml配置文件,根据该配置文件内扫描到的@Controller注解类将请求映射到对应的@RequestMapping注解方法上
@RequestMapping("/xxx"):映射url请求和方法;可以放在方法和类上;若类上有该注解则其所有使用该注解的方法继承类上的父url请求路径(即类上路径为${parentMapping}+${functionMapping})
@ResponseBody:该注解可以配置在类和方法上,配置类上代表对类的所有方法有效;代表直接返回方法的返回值而不是页面
@PathVariable:放在参数前,接收路径参数,如下
@RestController:组合注解,组合了@Controller和@ResponseBody两个注解的功能
以上内容参考来源:
Spring 3.x企业应用开发实战(陈雄华 林开雄 著)
JavaEE开发的颠覆者: Spring Boot实战 (汪云飞 著)
等网上资源。。。