Java Spring框架的注解式开发,是一种基于注解的Java web开发方式。相较于传统的XML配置方式,注解式开发更加简洁、易于理解和维护。下面,将从注解、Spring框架注解、实例示范和常见问题四个方面,为大家详细讲解Java Spring框架的注解式开发攻略。
注解
注解是Java8中最重要的新特性之一,也是Java Spring框架的核心元素之一。注解所做的事情是,将文档元数据(类、方法、字段等)与被描述元素(类、方法、字段等)相关联,以便于处理器处理该元数据。Java中的注解写法为 @注解名
,一般情况下紧跟在被注解元素的声明之前。
注解示例如下:
public @interface TestAnnotation {
int id() default 12345;
String msg() default "Hello,World!";
}
Spring框架注解
在Java Spring框架中,有许多内置注解用于实现快速构建Java web应用程序。下面是对常用注解的整理。
常见注解
@Autowired
:自动装配@Service
:用于标注服务层(即Service层)的注解@Repository
:用于标注持久层(即DAO层)的注解@Controller
:用于标注表现层(即Controller层)的注解@RequestMapping
:请求映射,用于处理HTTP请求
Autowired注解
@Autowired
注解通过使用Spring的依赖注入机制,将Service对象自动注入到Controller中。
@Controller
public class UserController {
@Autowired
private UserService userService;
}
Service注解
@Service
注解用于标注Service层的Java类。可以让Spring容器进行扫描,自动将其注册为Bean。
@Service
public class UserServiceImpl implements UserService{
}
Repository注解
@Repository
注解用于标注DAO层的Java类。同样可以让Spring容器维护该Bean。
@Repository
public class UserDaoImpl implements UserDao{
}
Controller注解
@Controller
注解用于标注Controller层的Java类。同样可以让Spring容器维护该Bean。
@Controller
public class UserController{
}
RequestMapping注解
@RequestMapping
注解常用于处理HTTP请求。可以将请求地址和相关处理函数关联起来,将请求分派到具体的Controller。
@Controller
public class UserController{
@RequestMapping(value = "/index", method = RequestMethod.GET)
public ModelAndView index(){
ModelAndView mav = new ModelAndView();
mav.setViewName("index.jsp");
return mav;
}
}
实例示范
示例1
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public User findUserById(int id) {
return userDao.findUserById(id);
}
}
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public User findUserById(int id) {
String sql = "SELECT * FROM user WHERE id = ?";
RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
User user = jdbcTemplate.queryForObject(sql, rowMapper, id);
return user;
}
}
@Controller
public class UserController{
@Autowired
private UserService userService;
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public ModelAndView getUser(@PathVariable("id") int id){
ModelAndView mav = new ModelAndView();
User user = userService.findUserById(id);
mav.addObject("user", user);
mav.setViewName("user.jsp");
return mav;
}
}
首先,UserDaoImpl
和UserServiceImpl
分别使用@Repository
和@Service
注解进行标注。代码中将JdbcTemplate
对象自动注入到UserDaoImpl
中。UserServiceImpl
中的userDao
对象也是使用@Autowired
注解由Spring容器进行构造的。
最关键的一部分是UserController
中的@PathVariable
注解,用于表示url中的占位符参数。
示例2
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello World!";
}
}
在该示例中,@RestController
表示将该类标记为一个RESTful 接口的类。同时,使用@RequestMapping
注解来进行URL匹配,返回"Hello World!"字符串。
常见问题
如何确定注入Bean的类型
可以使用@Qualifier
注解进行限定,精细地确定是哪一个实例进行注入。例如:
@Service
@Qualifier("userDaoImplA")
public class UserDaoImplA implements UserDao {
}
@Service
@Qualifier("userDaoImplB")
public class UserDaoImplB implements UserDao {
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
@Qualifier("userDaoImplA")
private UserDao userDao;
}
在上面的例子中,当需要使用UserDaoImplA
对象时,会使用@Qualifier
注解进行选择。
异常处理
在进行注解式开发时,由于某些注解的使用不当,常会出现NullPointerException
等未处理异常。如果出现这种情况,可以使用@ExceptionHandler
注解来处理异常。
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(NullPointerException.class)
public String handleNullPointerException(Exception e) {
return "发生 NullPointerException : " + e.getMessage();
}
@ExceptionHandler(Exception.class)
public String handleException(Exception e) {
return "发生 Exception : " + e.getMessage();
}
}
在上面的例子中,通过@RestControllerAdvice
注解来标注该类为全局异常处理类,在方法中使用@ExceptionHandler
注解来标注不同的异常类型,然后定义对应的异常处理逻辑即可。
以上就是关于Java Spring框架注解式开发的完整攻略,包括注解、Spring框架注解、实例示范和常见问题四个方面。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Spring框架的注解式开发你了解吗 - Python技术站