Spring注解开发

x33g5p2x  于2022-05-05 转载在 Spring  
字(4.1k)|赞(0)|评价(0)|浏览(597)

Spring注解开发

Spring原始注解

使用注解改进

注解替换位置1

注解替换位置2

在UserServiceImpl中其他改进写法

注解方式注入普通值

运行结果 

初始方法注解 

  Spring注解开发

Spring是轻代码而中配置,配置比较繁琐,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。

Spring原始注解

Spring原始注解主要是替代<Bean>的配置

**注意:**使用注解进行开发是,需要在applicationContext.xml中配置组件扫描,作用是值定哪个宝及其子包下的Bean需要进行扫描以便识别使用注解的类、字段个方法

使用注解改进

在com包下创建Dao包,service包,web包
在Dao包下的UserDao接口

  1. public interface UserDao {
  2. public void save();
  3. }

在Dao包下的Impl包下的UserDaoImpl类

注解替换位置1

  1. //<bean id="userDao" class="com.Dao.impl.UserDaoImpl"></bean>
  2. @Component("userDao")
  3. //这个注解和上面xml一样
  1. package com.Dao.impl;
  2. import com.Dao.UserDao;
  3. import org.springframework.stereotype.Component;
  4. //<bean id="userDao" class="com.Dao.impl.UserDaoImpl"></bean>
  5. @Component("userDao")
  6. //这个注解和上面xml一样
  7. public class UserDaoImpl implements UserDao {
  8. @Override
  9. public void save() {
  10. System.out.println("running...");
  11. }
  12. }

service包下的UserService接口

  1. public interface UserService {
  2. public void save();
  3. }

service包下的Impl包下的UserServiceImpl类

注解替换位置2

  1. // <bean id="userService" class="com.service.Impl.UserServiceImpl">
  2. @Component("userService")//这是一个组件,这个注解等于以上的xml配置
  1. //<property name="userDao" ref="userDao"></property>
  2. @Autowired // 这个表示自动注入
  3. @Qualifier("userDao")//里面写要注入的bean的id
  1. package com.service.Impl;
  2. import com.Dao.UserDao;
  3. import com.service.UserService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Qualifier;
  6. import org.springframework.stereotype.Component;
  7. // <bean id="userService" class="com.service.Impl.UserServiceImpl">
  8. @Component("userService")//这是一个组件
  9. public class UserServiceImpl implements UserService {
  10. //<property name="userDao" ref="userDao"></property>
  11. @Autowired // 这个表示自动注入
  12. @Qualifier("userDao")//里面写要注入的bean的id
  13. private UserDao userDao;
  14. //使用注解可以不写set方法
  15. /* public void setUserDao(UserDao userDao) {
  16. this.userDao = userDao;
  17. }
  18. */
  19. @Override
  20. public void save() {
  21. userDao.save();
  22. }
  23. }

在web包下的UserController类下

  1. package com.web;
  2. import com.service.UserService;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5. public class UserController {
  6. public static void main(String[] args) {
  7. ApplicationContext app=new ClassPathXmlApplicationContext("ApplicationContext.xml");
  8. UserService userService = app.getBean(UserService.class);
  9. userService.save();
  10. }
  11. }

运行结果

 在UserServiceImpl中其他改进写法

  1. @Component("userService")//这是一个组件
  2. public class UserServiceImpl implements UserService {
  3. //<property name="userDao" ref="userDao"></property>
  4. @Autowired // 按照数据类型从Spring容器中进行匹配的
  5. private UserDao userDao;
  6. @Override
  7. public void save() {
  8. userDao.save();
  9. }
  10. }

如果根据id进行匹配就要

  1. @Autowired // 按照数据类型从Spring容器中进行匹配的
  2. @Qualifier("userDao")//是按照id从容器中进行匹配的,但是主要此处的 @Qualifier结合@Autowired一起使用
  1. @Resource(name ="userDao")//等价于 @Autowired +@Qualifier
  1. package com.service.Impl;
  2. import com.Dao.UserDao;
  3. import com.service.UserService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Qualifier;
  6. import org.springframework.stereotype.Component;
  7. import javax.annotation.Resource;
  8. // <bean id="userService" class="com.service.Impl.UserServiceImpl">
  9. @Component("userService")//这是一个组件
  10. public class UserServiceImpl implements UserService {
  11. //<property name="userDao" ref="userDao"></property>
  12. // @Autowired // 按照数据类型从Spring容器中进行匹配的
  13. // @Qualifier("userDao")//是按照id从容器中进行匹配的,但是主要此处的 @Qualifier结合@Autowired一起使用
  14. @Resource(name ="userDao")//等价于 @Autowired +@Qualifier
  15. private UserDao userDao;
  16. @Override
  17. public void save() {
  18. userDao.save();
  19. }
  20. }

使用注解的方式set方法可以省略不写,使用想xml配置就必须写,注解是通过反射

注解方式注入普通值

@Value可以注入值,一般使用el表达式获取配置文件中的值

  1. @Value("${jdbc.driver}")
  2. private String user;

**运行结果 **

也可以注入普通值,但是显示十分的多余,下面两种方式一样。

  1. @Value("hello")
  2. private String test;
  3. private String test="hello";

初始方法注解 

在serviceImpl中

  1. @PostConstruct
  2. public void init(){
  3. System.out.println("初始方法");
  4. }
  5. @PreDestroy
  6. public void destory(){
  7. System.out.println("销毁方法");
  8. }

相关文章