spring纯java注解式开发(一)

习惯了用XML文件来配置spring,现在开始尝试使用纯java代码来配置spring。

  其实,spring的纯java配置,简单来说就是将bean标签的内容通过注解转换成bean对象的过程,没什么神秘的地方。

首先来配置AppConfig文件:

  配置的英文叫做configuration,所以,java配置文件的类前,为了说明此类属于配置文件的范畴,就加上这样一个标签:@Configuration 用来标识此类是一个配置类;然后就是@ComponentScan 标签,是不是很熟悉?对的,这个就是表示扫描范围的一个标签,后面可以加上一个属性 basePackages 用来说明要管理的bean在哪个包下,使用方式和在XML文件里配置时的使用方法一样,如果是多包扫面,就用大括号括起来,中间用逗号隔开就行了;其他的根据需要进行添加,譬如 @EnableScheduling 和 @EnableAspectJAutoProxy 等等,按需添加即可。

  在这个文件里呢,我配置了一个数据库。第一,通过@Autowired 来注入DataSource ,然后配置一个@Bean,就是写一个datasource的实例就ok了。其他的,譬如shiro的配置等等都可以在这里进行,方法同data一样。定义新拦截器也可在此处进行,需要说明的就是,拦截器的bean里需要添加一个name属性,用来定义此拦截器的名称,方便在web.xml中进行引用。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.util.FileCopyUtils;

import javax.servlet.Filter;
import javax.sql.DataSource;
import java.io.FileReader;
import java.io.IOException;

@Configuration
@EnableScheduling
@EnableAspectJAutoProxy
@ComponentScan(basePackages = {"com.lab.service", "com.lab.task", "com.lab.security"})
public class ApplicationConfig {

    @Autowired
    private DataSource dataSource;

    @Bean
    public IDBI database() {
        IDBI dbi = new DBI(dataSource);
        logger.debug("dbi : {}", dbi);
        return dbi;
    }

// 。。。

}

其次就是配置WebConfig文件:

  同前一个一样,首先需要添加的就是@Configuration 标签,还有一个不同的就是需要加上@EnableWebMvc 标签以开启MVC模式。当然也有@ComponentScan 标签,使用方法同前,需要basePackages 属性的定义。按需也可添加诸如 @EnableAspectJAutoProxy 等标签。

  这里定义的有譬如 setPrefix 和 setSuffix 等内容,具体按实际进行增减。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@EnableAspectJAutoProxy
@ComponentScan(basePackages = { "com.lab.controller" })
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/view/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

}

定义DataConfig文件:

  前面我是直接在AppConfig中进行注入了数据库的定义,是因为具体的数据库连接的定义我是在这里进行的。

  @Configuration 必不可少了,然后我又定义了一个属性 @Profile(“data”)用以说明此类的用途。然后就是定义了一个@Bean(name=“dataSource”) ,内容是数据库连接池、链接的用户名、密码、等待超时时间啦等等一系列的数据库的配置。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration
@Profile("data")
public class DevConfig {
  /* 此处我用了properties文件的方式进行数据库的定义,也可直接在代码中书写 */
    private static final String databaseConfig = "datasource.properties";

    @Bean(name = "dataSource")
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        InputStream inStream = null;
        try {
            Properties prop = new Properties();
            inStream = getClass().getClassLoader().getResourceAsStream(databaseConfig);
            prop.load(inStream);
            String datastyle = prop.getProperty("data.style");
            dataSource.setUrl(
                    prop.getProperty(datastyle + ".data.url") + ":" + prop.getProperty(datastyle + ".data.database"));
            dataSource.setUsername(prop.getProperty(datastyle + ".data.user"));
            dataSource.setPassword(prop.getProperty(datastyle + ".data.password"));
            /* 配置过滤 */
            dataSource.setFilters(prop.getProperty(datastyle + ".data.filters"));
            /* 配置初始化大小、最小、最大 */
            dataSource.setInitialSize(Integer.parseInt(prop.getProperty(datastyle + ".data.initialSize")));
            dataSource.setMinIdle(Integer.parseInt(prop.getProperty(datastyle + ".data.minIdle")));
            dataSource.setMaxActive(Integer.parseInt(prop.getProperty(datastyle + ".data.maxActive")));
            /* 配置获取连接等待超时的时间 */
            dataSource.setMaxWait(Integer.parseInt(prop.getProperty(datastyle + ".data.maxWait")));
            /* 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */
            dataSource.setTimeBetweenEvictionRunsMillis(
                    Integer.parseInt(prop.getProperty(datastyle + ".data.timeBetweenEvictionRunsMillis")));
            /* 配置一个连接在池中最小生存的时间,单位是毫秒 */
            dataSource.setMinEvictableIdleTimeMillis(
                    Integer.parseInt(prop.getProperty(datastyle + ".data.minEvictableIdleTimeMillis")));
        } catch (FileNotFoundException fileNotFoundException) {
            fileNotFoundException.printStackTrace();
        } catch (IOException iOException) {
            iOException.printStackTrace();
        } catch (SQLException sQLException) {
            sQLException.printStackTrace();
        }
        return dataSource;
    }

}

这些都定义好后,在web.xml文件中进行配置下就行了。

    <!-- 上下文配置文件の地址 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            com.bell.lab.springconfig.DevConfig,
            com.bell.lab.springconfig.ApplicationConfig
        </param-value>
    </context-param>
    <servlet>
        <servlet-name>SpringDemoServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>com.bell.lab.springconfig.WebConfig</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringDemoServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>   <context-param>        <param-name>spring.profiles.default</param-name>        <param-value>data</param-value>    </context-param>

至此完事,跟在spring-application.xml中进行配置效果是一样的,整体上更符合java的习惯而已。

ps:其实,就算是web.xml文件,也可通过java代码的形式进行配置的,不过我觉着有点麻烦,就没进行说明,感兴趣的可以自行查找相关资料进行配置。

时间: 2024-10-05 09:10:45

spring纯java注解式开发(一)的相关文章

shiro授权、注解式开发

1.shiro授权角色.权限 2.Shiro的注解式开发 授权 ShiroUserMapper.xml <select id="getRolesByUserId" resultType="java.lang.String" parameterType="java.lang.Integer"> select r.roleid from t_shiro_user u,t_shiro_user_role ur,t_shiro_role r

《SpringMVC从入门到放肆》八、SpringMVC注解式开发(基本配置)

上一篇我们结束了配置式开发,配置式开发目前在企业中用的并不是很多,大部分企业都在使用注解式开发,所以今天我们就来学习注解式开发.所谓SpringMVC注解式开发是指,处理器是基于注解的类的开发方式.对于每一个定义的处理器,无需在配置文件中逐个注册,只需在代码中通过对类与方法的注解,便可完成注册. 一.注册组件扫描器 这里说的组件即处理器,需要指定处理器所在的基本包. <?xml version="1.0" encoding="UTF-8"?> <b

13.MyBatis注解式开发

mybatis 的注解,主要是用于替换映射文件.而映射文件中无非存放着增.删.改.查 的 SQL 映射标签.所以,mybatis 注解,就是要替换映射文件中的 SQL 标签. mybatis 官方文档中指出,若要真正想发挥 mybatis 功能,还是要用映射文件.即 mybatis官方并不建议通过注解方式来使用 mybatis. 注解的基础知识: 注解的基础语法 A.注解后是没有分号的. B.注解首字母是大写的,因为注解与类.接口是同一级别的.一个注解,后台对应着 一个@interface 类.

Eclipse中设置ButterKnife进行注解式开发步骤

最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的特点如下: (1)强大方便的处理View绑定和Click事件,简化代码,提升开发效率. (2)方便的处理ListView的Adapter里的ViewHolder绑定问题. (3)运行时不会影响App的效率,使用配置方便: (4)代码思路清晰,可读性强: 下面我在Eclipse中进行简单操作,如何把butterknife-6.1.0.jar导入Android项目,进行注解式开发.具体步骤如下: [1

【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错

原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的特点如下: (1)强大方便的处理View绑定和Click事件,简化代码,提升开发效率.(2)方便的处理ListView的Adapter里的ViewHolder绑定问题.(3)运行时不会影响App的效率,使用配置方便:(4)代码思路清晰,可读性强: 下面我在Eclipse中进行简单操作,如何把butt

006 注解式开发springmvc

一. 概述 在我们日常的开发之中,我们最为常用的就是使用注解式开发springmvc. 在前面我们基本讲到了springmvc的基本原理,但是还有一些组件需要在后面结合才能完成讲解. 注解式开发的的核心 : [1]URL映射 [2]参数映射 [3]视图映射 [4]域对象处理 [5]参数转换器 [6]异常处理器 [7]拦截器 等等, 二 . 注解式开发学习的问题 我们学习注解式开发的时候,最容易出现的一个问题就是被很多的注解混淆了我们最初学习的目的. 按照上面的部分,我们在每一个部分都会学习几个注

走进JavaWeb技术世界13:Hibernate入门经典与注解式开发

微信公众号[黄小斜]大厂程序员,互联网行业新知,终身学习践行者.关注后回复「Java」.「Python」.「C++」.「大数据」.「机器学习」.「算法」.「AI」.「Android」.「前端」.「iOS」.「考研」.「BAT」.「校招」.「笔试」.「面试」.「面经」.「计算机基础」.「LeetCode」 等关键字可以获取对应的免费学习资料. ? Hibernate入门这一篇就够了 前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hiber

Spring mvc注解式开发入门

java类 package com.cloud.po; import Java.util.Date; public class Items { private Integer id; private String name; private Float price; private String pic; private Date createtime; private String detail; public Integer getId() { returnid; } public void

spring注解式开发之视图解析器

http://localhost:8089/springmvc-04-viewResovler/springmvc/hello 原文地址:https://www.cnblogs.com/wq-9/p/10166504.html