zoukankan      html  css  js  c++  java
  • spring注解开发

     Spring注解开发

    1. Spring原始注解

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

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

    注解说明
    @Component 使用在类上用于实例化Bean
    @Controller 使用在web层类上用于实例化Bean
    @Service 使用在service层类上用于实例化Bean
    @Repository 使用在dao层类上用于实例化Bean
    @Autowired 使用在字段上用于根据类型依赖注入
    @Qualifier 结合@Autowired一起使用用于根据名称进行依赖注入
    @Resource 相当于@Autowired+@Qualifier,按照名称进行注入
    @Value 注入普通属性
    @Scope 标注Bean的作用范围
    @PostConstruct 使用在方法上标注该方法是Bean的初始化方法
    @PreDestroy 使用在方法上标注该方法是Bean的销毁方法

    注意:

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

     <!--配置组件扫描-->
        <context:component-scan base-package="com.lang"/>

    使用@Compont或@Repository标识UserDaoImpl需要Spring进行实例化。

    //@Component("userDao")
    @Repository("userDao")
    public class UserDaoImpl implements UserDao {
        @Override
        public void save() {
            System.out.println("save running... ...");
        }
    }

    使用@Compont或@Service标识UserServiceImpl需要Spring进行实例化

    使用@Autowired或者@Autowired+@Qulifier或者@Resource进行userDao的注入

    //@Component("userService")
    @Service("userService")
    public class UserServiceImpl implements UserService {
        /*@Autowired
        @Qualifier("userDao")*/
        @Resource(name="userDao")
        private UserDao userDao;
        @Override
        public void save() {       
          userDao.save();
        }
    }

    使用@Value进行字符串的注入

    @Repository("userDao")
    public class UserDaoImpl implements UserDao {
        @Value("注入普通数据")
        private String str;
        @Value("${jdbc.driver}")
        private String driver;
        @Override
        public void save() {
            System.out.println(str);
            System.out.println(driver);
            System.out.println("save running... ...");
        }
    }

    使用@Scope标注Bean的范围

    //@Scope("prototype")
    @Scope("singleton")
    public class UserDaoImpl implements UserDao {
       //此处省略代码
    }

    使用@PostConstruct标注初始化方法,使用@PreDestroy标注销毁方法

    @PostConstruct
    public void init(){
        System.out.println("初始化方法....");
    }
    @PreDestroy
    public void destroy(){
        System.out.println("销毁方法.....");
    }

    2. Spring新注解(springboot中用到的多)

    使用上面的注解还不能全部替代xml配置文件,还需要使用注解代替的配置如下:

    • 非自定义的Bean的配置:<bean>

    • 加载properties文件的配置:< context:property-placeholder >

    • 组件扫描的配置:< context:component-scan >

    • 引入其他文件:<import>

      注解说明
      @Configuration 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解
      @ComponentScan 用于指定 Spring 在初始化容器时要扫描的包。 作用和在 Spring 的 xml 配置文件中的 <context:component-scan base-package="com.itheima"/>一样
      @Bean 使用在方法上,标注将该方法的返回值存储到 Spring 容器中
      @PropertySource 用于加载.properties 文件中的配置
      @Import 用于导入其他配置类

      @Configurable

      @ComponentScan

      @Import

      //标志该类是Spring的核心配置类
      @Configurable
      //<context:component-scan base-package="com.lang"/>     组件扫描
      @ComponentScan("com.lang")
      //<import resource=""/>     其他配置载入
      @Import({DataSourceConfiguration.class})//多个时在{xx,xx}
      public class SpringConfiguration {
      ​
      }

      @PropertySource

      @Value

      @Bean

    //<context:property-placeholder location="classpath:jdbc.properties"/>
    @PropertySource("classpath:jdbc.properties")
    public class DataSourceConfiguration {
        @Value("${jdbc.driver}")
        private String driver;
        @Value("${jdbc.url}")
        private String url;
        @Value("${jdbc.username}")
        private String username;
        @Value("${jdbc.password}")
        private String password;
    ​
        @Bean("dataSourse")//Spring会将当前方法的返回值以指定名称存储到Spring容器中
        public DataSource getDataSource(){
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(driver);
            dataSource.setUrl(url);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            return dataSource;
        }
    }

    测试加载核心配置类创建Spring容器

     public static void main(String[] args) throws SQLException {
    ​
            //ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
            ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
            UserService userService = (UserService) app.getBean("userService");
            userService.save();
            DataSource dataSource = (DataSource) app.getBean("dataSourse");
            Connection con = dataSource.getConnection();
            System.out.println(con);
        }
     
  • 相关阅读:
    原型链与继承
    js错误处理Try-catch和throw
    函数柯里化
    js函数节流
    事件委托
    innerHTML属性的内存和性能问题
    微信小程序左滑显示按钮demo
    this的作用
    前端工作面试经典问题(超级全)
    HTML5入门指南
  • 原文地址:https://www.cnblogs.com/DiaoStudy/p/13741847.html
Copyright © 2011-2022 走看看