基於 java 配置Spring
阿新 • • 發佈:2019-01-31
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();
});
}
}