1. 程式人生 > >基於 java 配置Spring

基於 java 配置Spring

1 修改 web.xml

<!--使用java配置檔案 需要顯式的指定上下文配置類, 在使用xml配置方式的時候Spring預設使用ClassPathXmlApplicationContext來載入上下文檔案。-->
<context-param>
    <param-name>contextClass</param-name>
    <param-value>
        org.springframework.web.context.support.AnnotationConfigWebApplicationContext
    </param-value
>
</context-param> <!--spring 配置的beans--> <context-param> <param-name>contextConfigLocation</param-name> <!--自己定義的配置上下文的java檔案--> <param-value>com.hjx.demo.appliction.ContextConfig</param-value> </context-param> <servlet> <servlet-name
>
dispatcher-servlet</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.hjx.demo.appliction.Application</param-value> </init-param> <!-- 用來指定應用程式載入相應的spring上下文配置 配合@Profile(value = "dev")註解使用, 如果沒有配置的話不需要新增 --> <init-param> <param-name>spring.profiles.default</param-name> <param-value>dev</param-value> </init-param> <!--載入順序--> <load-on-startup>1</load-on-startup> </servlet> <!--指定spring servlet對映的路徑--> <servlet-mapping> <servlet-name>dispatcher-servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

2 定義java檔案 使用註解

//@Profile(value = "dev")配置上下文環境 通過web.xml中來選擇相應的環境
//在junit中通過@ActiveProfiles(value = {"dev"})註解來啟用.使用junit的話必須要新增.
@Profile(value = "dev") 
@Configuration // 表示這個類是spring的一個配置類。
@Import(value = DataSourceApplication.class)// 引入其他的配置檔案
@EnableWebMvc  // 表示開啟springMVC 的支援
@ComponentScan(basePackages = {"com.hjx.demo"}) // 掃描包註解,掃描com.hjx.demo包下的spring註解
// 繼承了WebMvcConfigurationSupport 類。該類中spring已經建立了大部分需要用到的 bean。
public class Application extends WebMvcConfigurationSupport {

    /**
     * @Bean 註解表示這是一個 spring 中的bean,bean的名稱預設為該方法的方法名稱。bean的class為這個方法的返回值。
     *給bean設定值的時候參照xml檔案中的設定方法就行。但是部分bean除外,一些屬性沒有set方法。
     *可以直接檢視該類,瞭解原始碼。
     *
     *下面的連個bean 是設定 ajax 中json檢視解析的bean。具體引數設定直接查看了原始碼。
     */



    @Bean
    public AnnotationMethodHandlerAdapter annotationMethodHandlerAdapter() {
        AnnotationMethodHandlerAdapter handlerAdapter = new AnnotationMethodHandlerAdapter();
        handlerAdapter.setMessageConverters(new HttpMessageConverter[]{jackson2HttpMessageConverter()});
        return handlerAdapter;
    }

    @Bean
    public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter(){
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
        //設定檢視解析的型別和編碼格式。這個類裡沒有對應個set方法,使用建構函式也不行。不知道spring是怎麼根據xml設定引數的。
        supportedMediaTypes.add(MediaType.parseMediaType("text/html;charset=UTF-8"));
        supportedMediaTypes.add(MediaType.parseMediaType("text/json;charset=UTF-8"));
        supportedMediaTypes.add(MediaType.parseMediaType("application/json;charset=UTF-8"));
        messageConverter.setSupportedMediaTypes(supportedMediaTypes);
        return messageConverter;
    }
}

測試類

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
    classes = {Application.class, ContextConfig.class}, 
    loader = AnnotationConfigWebContextLoader.class)// 使用java配置spring時,需要指定載入器
@ActiveProfiles(value = {"dev"}) // 用來啟用相應環境的spring配置
@WebAppConfiguration //不知道幹啥的,反正要加上.
public class JDBCTest {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    public void test() {
        System.out.println("=====================");
    }

    @Test
    public void jdbcTest() {
        System.out.println(jdbcTemplate.hashCode());

        String sql = "select * from tbl_wechat_user";

        jdbcTemplate.query(sql, resultSet -> {
            System.out.print(resultSet.getString(1)+"===");
            System.out.print(resultSet.getString(2)+"===");
            System.out.print(resultSet.getString(3));
            System.out.println();

        });

    }
}