先说一下什么是组件扫描:
指定一个包路径,Spring会自动扫描该包及其子包所有组件类,当发现组件类定义前有特定的注解标记时,就将该组件纳入到Spring容器。等价于原有XML配置中的<bean>定义功能。
组件扫描可以替代大量XML配置的<bean>定义。
使用组件扫描,首先需要在XML配置中指定扫描类路径
<context:component-scan
base-package = "org.example"/>
上面配置官网:www.fhadmin.org,容器实例化时会自动扫描org.example包及其子包下所有组件类。
指定扫描类路径后,并不是该路径下所有组件类都扫描到Spring容器的,只有在组件类定义前面有以下注解标记时,才会扫描到Spring容器。
@Component:通用注解;@Name:通用注解;@Repository:持久化层组件注解
@Service:业务层组件注解;@Controller:控制层组件注解
当一个组件在扫描过程中被检测到时,会生成一个默认id值,默认id为小写开头的类名。也可以在注解标记中自定义id。下面两个组件id名字分别是oracleUserDao和loginService
@Repository
public class OracleUserDao implements UserDao{
//.....
}
@Service("loginService")
public class UserService{
//....
}
官网:www.fhadmin.org通常受Spring管理的组件,默认的作用域是“singleton”。如果需要其他作用域可以使用@Scope注解,只要在注解中提供作用域的名称即可。
@Scope("prototype")
@Repository
public class OracleUserDao implements EmpDao{
//...
}
@PostConstruct和@PreDestroy注解标记分别用于指定初始化和销毁回调方法,使用示例:
public class ExampleBean{
@PostConstruct
public void init(){
//初始化回调方法
}
@PreDestroy
public void destroy(){
//销毁回调方法
}
}
具有依赖关系的Bean对象,利用下面任何一种注解都可以实现关系注入:
@Resource
@Autowired/@Qualifier
@Inject/@Named
@Resource注解标记可以用在字段定义或setter方法定义前面,默认首先按名称匹配注入,然后类型匹配注入:
public class UserService{
//@Resource
private UserDao userDao;
@Resource
public void setUserDao(UserDao dao){
this.userDao = dao;
}
}
当遇到多个匹配Bean时注入会发生错误,官网:www.fhadmin.org 可以显示指定名称,例如@Resource(name = "empDao1")
@Autowired注解标记也可以用在字段定义或setter方法定义前面,默认按类型匹配注入:
public class UserService{
//@Autowired
private UserDao userDao;
@Autowired
public void setUserDao(UserDao dao){
this.userDao = dao;
}
}
@Autowired当遇到多个匹配Bean时注入会发生错误,可以使用下面方法指定名称:
public class UserService{
//@Autowired
//@Qualifiter("mysqlUserDao")
private UserDao userDao;
@Autowired
public void setUserDao(@Qualifiter("mysqlUserDao") userDao dao){
this.userDao = dao;
}
}
@Inject注解标记是Spring3.0开始增添的对JSR-330标准的支持,使用前需要添加JSR-330的jar包,使用方法与@Autowired相似,具体如:
public class UserService{
//@Inject
private UserDao userDao;
@Inject
public void setUserDao(UserDao dao){
this.userDao = dao;
}
}
@Inject当遇到多个匹配Bean时注入会发生错误,可以使用@Named指定名称限定,使用方法为:
public class UserService{
private UserDao userDao;
@Inject
public void setUserDao(@Named("mysqlUserDao") UserDao dao){
this.userDao = dao;
}
}
@Value注解可以注入Spring表达式值,使用方法:
首先在XML配置中指定要注入的properties文件
<util:properties id = "jdbcProps" location = "classpath:db.properties"/>
然后在setter方法前使用@Value注解
public class JDBCDataSource{
@Value("#{jdbcProps.url}")
private String url;
@Value("#{jdbcProps.driver}")
public void setUrl(String driver){
try{Class.forName(driver)}catch(.....)...
}
}
RequestMapping注解应用
@RequestMapping可以用在类定义和方法定义上
@RequestMapping标明这个类或者方法与哪一个客户请求对应
@RequestMapping可以定义在Controller类前和处理方法前,主要用于指定Controller的方法处理哪些请求
@Controller
@RequestMapping("/demo01")
public class Controller{
@RequestMapping("/hello")
public String execute()throws Exception{
return "hello";
}
}
开启@RequestMapping注解映射,官网:www.fhadmin.org需要在Spring的XML配置文件中定义RequestMappingHandlerMapping(类定义前)和RequestMappingHandlerAdapter(方法定义前)两个bean组件
示例:
<bean
class ="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean
class = "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
从Spring3.2版本开始可以使用下面XML配置简化RequestMappingHandlerMapping和RequestMappingHandlerAdapter定义:
<mvc:annotation-driven/>
Controller注解应用
推荐使用@Controller注解声明Controller组件,这样可以使得Controller定义更加灵活,可以不用实现Controller接口,请求处理的方法也可以灵活定义
@Controller
@RequestMapping("/demo01")
public classs Controller{
@RequestMapping("/hello")
public String execute()throws Exception{
return "hello";
}
}
为了使@Controller注解生效,需要在Spring的XML配置文件中开启组件扫描定义,并指定Controller组件所在包
<context:component-scan base-package = "com.controller"/>
接受请求参数值
Spring MVC Web请求提交数据到控制器有下面几种方法:
使用 HttpServletRequest获取
使用@RequestParam注解
使用自动机制封装成Bean对象
使用@RequestParam注解:
Spring会自动将表单参数注入到方法参数(名称一致)
使用@RequestParam注解,映射不一致的名称
优点参数类型会自动转换,但可能出现类型转换异常
@RequestMapping("/login-action.form")
public String checkLogin(String name,@RequestParam("pwd")String password,HttpServletRequest req){
System.out.println(name);
System.out.println(password);
User user = userService.login(name,password);
//处理过程
return "success";
使用@ModelAttribute注解是当Controller组件处理后,需要向JSP传值用此方法。
(引出:向JSP页面传值也可以直接使用HttpServletRequest和Session;ModeAndView对象;ModelMap参数对象等)
示例:
在Controller方法的参数部分或Bean属性方法上使用。
@RequestMapping("login-action.from")
public String checkLogin(@ModelAttribute("user")User user){
//处理过程
return "success";
}
@ModelAttribute("name")
public String getName(){
return name;
}
(@ModelAttribute数据会利用HttpServletRequest的Attribute传递到JSP页面中)
@ExceptionHandler注解
@ExceptionHandler注解提供了Spring MVC处理异常的方法
(引出:Spring MVC处理异常的方法有三种:使用Spring MVC提供的简单异常处理器(SimpleMappingExceptionResolver);实现HandlerExceptionResolver接口自定义异常处理器;使用 @ExceptionHandler注解实现异常处理)
@ExceptionHandler注解使用方法:
public class BaseController{
@ExceptionHandler
public String execute(HttpServletRequest req,Exception e){
req.setAttribute("e",e);
//可根据异常类型不同返回不同视图名
return "error";
}
}
(适合局部处理有“处理过程”的异常)
然后其他的Controller继承BaseController类即可
@ResponseBody注解(在Spring MVC中,此注解与JSON响应相关)
在控制器方法上使用 @ResponseBody 注解, 就可以自动的将控制器的返回值(JavaBean)转换为JSON发送到客户端.
@ResponseBody注解主要用于Controller组件的处理方法前,使用方法为:
引入jackson开发包,后面示例用的是jackson-annotations-2.4.1.jar,jackson-core-2.4.1.jar,jackson-databind-2.4.1.jar
在Spring配置文件中定义<mvc:annotation-driven/>,开启对@ResponseBody应用的支持
在Controller处理方法前定义@ResponseBody注解
示例:
使用@ResponseBody,返回单个值:
@RequestMapping("/test1")
@ResponseBody
public boolean f1(){
//业务处理代码
return true;
}
使用@ResponseBody返回多个值:
@RequestMapping("/test2")
@ResponseBody
public Map<String,Object>f2(){
Map<String,Object> m = new HashMap<String,Object>)();
m.put("id",1);
m.put("name","Tom");
return m;
}
使用@ResponseBody返回List结果:
@RequestMapping("/test3")
@ResponseBody
public List<String>f3(){
List<String> list = new ArrayList<String>();
list.add("java");
list.add("php");
list.add("ui");
return list;
}
使用@ResponseBody返回对象结果:
@RequestMapping("/test4")
@ResponseBody
public Object f4(){
Object obj = new Object();
return obj;
}
使用@ResponseBody返回对象集合结果:
@RequestMapping("/test5")
@ResponseBody
public Object f5(){
Emp e1 = new Emp();
e1.setId(1);
e1.setName("张三");
Emp e2 = new Emp();
e2.setId(2);
e2.setName("李四");
List<Emp> list = new ArrayList<Emp>();
list.add(e1);
;ist.add(e2);
return list;
}
注解实现AOP
开发步骤:
创建方面组件:
创建一个类,充当方面组件,实现通用业务逻辑。
声明方面组件官网:www.fhadmin.org:
在applicationContext.xml中开启AOP注解扫描:
<aop:aspectj-autoproxy proxy-target-class = "true"/>;
使用@Component注解标识这个类,将其声明为组件。
使用@Aspect注解标识这个类,将其声明为方面组件。
使用方面组件:
在组件的方法上,使用注解将方面组件作用到目标组件的方法上,并设置通知类型以确认方面组件调用的时机。
使用前置通知,在方面组件方法上增加注解:
@Before("within(controller..*)")
public void log(){
}
后置通知、最终通知使用方法与前置通知一致,只需要将注解改为@AfterReturning、@After即可。
环绕通知,在方面组件方法上增加注解:
@Around("within(controller..*)")
public Object log(ProceedingJoinPoint p) throws Throwable{
//此处代码在目标组件前执行
Object obj = p.proceed();//执行目标组件方法
//此处代码在目标组件后执行
return obj;
}
使用异常通知,在方面组件方法上增加注解:
@AfterThrowing(pointcut = "within(controller..*)",throwing = "e")
public void log(Exception e){
}
@Transactional注解
此注解实现声明式事务,步骤如下:
在applicationContext.xml中声明事务组件官网:www.fhadmin.org,开始事务注解扫描,示例为:
<!-- 声明事务管理组件 -->
<bean id = "txManager"
class = "org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name = "dataSource" ref = "ds"/>
</bean>
<!-- 开启事务注解扫描 -->
<tx:annotation-driven transaction-manager = "txManager" proxy-target-class = "true"/>
transaction-manager指定的事务管理器txManager,需要根据数据库访问技术不同选择不同的实现。例如JDBC、Mybatis技术选用DataSourceTransactionManager,而Hibernate技术则选用HibernateTransactionManager.
使用 @Transactional注解声明事务,使用方法为:
@Transactional
public class DefaultFooService implements FooService{
// @Transactional
public void insertFoo(Foo foo){...}
public void updateFoo(Foo foo){...}
@Transactional注解标记可以用在类定义和方法定义前,方法的事务设置将优先于类级别注解的事务设置。
@Transactional注解标记有以下属性,在使用时可以根据需要做特殊设定:
- propagation:设置事务传播
- isolation:设置事务隔离级别
- readOnly:设置为只读,还是可读写
- rollbackFor:设置遇到哪些异常必须回滚
- noRollbackFor:设置遇到哪些异常不回滚
@Transactional注解属性默认设置如下:
事务传播设置是:PROPAGATION_REQUIRED
事务隔离级别是:ISOLATION_DEFAULT
事务是读/写
事务超时默认是依赖于事务系统的,或者事务超时没有被支持
任何RuntimeException将触发事务回滚,但是任何Checked Exception将不触发事务回滚
@PathVariable应用
@PathVariable作用是将URI请求模板中的变量解析出来,映射到处理方法的参数上,示例为:
@RequestMapping(value = "/emp/{id}",method = requestMethod.GET)
public String execute(@PathVariable("id") int id){
//查询操作处理
return " ";
}
上述URI请求模板匹配/emp/1、emp/2等格式请求
相关推荐
SSM框架,即Spring、SpringMVC和MyBatis的集成框架,是Java Web开发中常用的三大组件。在全注解开发模式下,这三大框架的配置和交互更简洁,减少了XML配置文件的使用,提高了开发效率。下面将详细介绍SSM框架全注解...
SSM框架常用的注解说明
其中,SSM框架作为一种轻量级、灵活的组合框架,在企业级应用开发中得到了广泛应用。本文将详细介绍SSM框架的基本概念、组成部分及其在实际项目中的应用方法。 #### 二、框架技术的重要性 框架技术是指一套预先定义...
SSM 框架具有简单、可测试和松耦合等特点,从这个角度出发,SSM 框架就是应用于任何 Java 应用开发中的一个优秀框架。SSM 框架提供了对 AOP 的支持,允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而...
SSM 框架是当前 Java Web 开发中最流行的框架之一,它是由 Spring、SpringMVC 和 MyBatis 三个框架组成的。下面我们将对 SSM 框架的三个原理进行分析。 一、Spring 框架原理 Spring 框架是 SSM 框架的核心组件之一...
Ssm框架的应用场景非常广泛,包括Web应用程序、移动应用程序、桌面应用程序等。Ssm框架可以应用于任何需要高效的开发、灵活的配置和强大的扩展性的场景。 Ssm框架是一个功能强大、灵活的框架,它提供了一个高效的...
在本项目中,"SSM框架搭建纯注解形式"指的是使用注解来配置SSM,而非传统的XML配置文件。这种做法使得代码更简洁,也更易于理解和维护。我们将探讨如何实现这样一个纯注解的SSM框架,以及如何引入PageHelper进行分页...
"第18章"则以医疗信息系统的案例,演示了SSM框架在实际项目中的应用,帮助学习者将理论知识转化为实践能力。 总的来说,这套教程覆盖了SSM框架的基础知识和高级特性,从理论到实践,从单一框架到整合应用,全方位...
SSM框架,全称为Spring、SpringMVC和MyBatis的组合,是Java Web开发中常用的一套企业级应用框架。本章将详细介绍如何利用SSM框架开发高效、稳定的后端服务,帮助初学者迈进后端开发的大门。 首先,Spring作为核心...
总结,"基于osgi整合ssm框架注解开发"的主题涵盖了使用OSGi的模块化特性来管理和部署基于Spring、SpringMVC和MyBatis的Web应用,同时利用注解简化配置和开发过程。通过这样的整合,开发者可以构建出高度可扩展、模块...
4. **SSM1.xmind**:这个思维导图可能是对整个SSM集成的概述,涵盖了Spring、SpringMVC和Mybatis的集成过程,包括配置文件的设置、Maven依赖管理、Servlet容器的部署、数据源配置、AOP在SSM中的应用,以及异常处理和...
这个"ssm框架整合小demo"提供了一个实践性的示例,旨在帮助开发者理解和应用这些技术。以下是对这个项目及其包含文件的详细解读。 首先,Spring是一个全面的后端应用程序管理框架,它提供了依赖注入(DI)和面向切...
三、SSM框架的应用场景 1. 企业级应用:SSM框架非常适合企业级应用,能够满足复杂的业务需求。 2. Web应用:SSM框架非常适合Web应用,能够快速开发高性能的Web应用程序。 3. 数据库交互:SSM框架非常适合数据库交互...
SSM(Spring、Struts、MyBatis)框架是Java Web开发中常用的一套整合框架,主要用于构建企业级应用。Idea是一款强大的Java集成开发环境,支持SSM框架的便捷开发。在这个“idea ssm 全注解框架”中,我们将深入探讨...
**Spring框架**:Spring是一个开源的应用框架,它主要解决企业应用开发的复杂性。在Spring中,你可以通过依赖注入(DI)和面向切面编程(AOP)来管理对象的生命周期和行为。在注解方式下,如`@Autowired`用于自动...
SSM框架介绍及应用 Spring框架是当前最流行的开源应用程序框架之一,旨在解决Java EE开发中的许多问题。本文将对Spring框架的基本思想和核心组件进行剖析,并介绍其在实际开发中的应用。 一、Spring框架的基本...
SSM框架,即Spring、SpringMVC和MyBatis的集成,是Java Web开发中常用的一种技术栈。这个"SSM框架实现登录注册功能完整代码"项目,通过IDEA(IntelliJ IDEA)进行整合,提供了从零开始构建登录注册功能的全套源码,...
1. **Spring框架**:Spring是一个开源的应用框架,提供了一个全面的基础设施,支持创建Java EE应用。在本项目中,Spring作为核心容器,管理着应用对象的生命周期和依赖注入(DI)。它还包含了SpringMVC,这是一个...
同时,SSM框架也支持与其它组件如Hibernate、Quartz等集成,以满足复杂的应用场景。 总之,SSM框架的配置文件和jar包是实现Spring、SpringMVC和MyBatis整合的关键。理解并掌握这些配置细节,将有助于提升开发效率和...