Spring5(一-二)
Posted 麦克叔叔每晚10点说
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring5(一-二)相关的知识,希望对你有一定的参考价值。
在AppConfig.java配置类中,我们完成了以下操作:
l 使用 @Configuration注解标记为一个Spring配置类。
l 使用 @EnableTransactionManagement开启基于注解的事务管理。
l 配置 @EnableJpaRepositories指定去哪查找Spring Data JPA资源库(repository)。
l 使用 @PropertySource注解和 PropertySourcesPlaceholderConfigurer Bean定义配置PropertyPlaceHolder bean从 application.properties文件加载配置。
l 为DataSource、JAP的EntityManagerFactory和JpaTransactionManager定义Bean。
l 配置DataSourceInitializer Bean,在应用启动时,执行 data.sql脚本来初始化数据库。
我们需要在 application.properties中完善配置,如下所示:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=admin
init-db=true
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=update
我们可以创建一个简单的SQL脚本 data.sql来将演示数据填充到USER表中:
delete from user;
insert into user(id, name) values(1,'Siva');
insert into user(id, name) values(2,'Prasad');
insert into user(id, name) values(3,'Reddy');
我们可以创建一个附带基本配置的 log4j.properties文件,如下所示:
log4j.rootCategory=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %t %c{2}:%L - %m%n
log4j.category.org.springframework=INFO
log4j.category.com.sivalabs=DEBUG
步骤3:配置Spring MVC Web层的Bean
我们必须配置Thymleaf的ViewResolver、处理静态资源的ResourceHandler和处理i18n的MessageSource等。
@Configuration
@ComponentScan(basePackages = { "com.sivalabs.demo"})
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter
{
@Bean
public TemplateResolver templateResolver() {
TemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine());
thymeleafViewResolver.setCharacterEncoding("UTF-8");
return thymeleafViewResolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
{
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
{
configurer.enable();
}
@Bean(name = "messageSource")
public MessageSource configureMessageSource()
{
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setCacheSeconds(5);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
}
在WebMvcConfig.java配置类中,我们完成了以下操作:
l 使用 @Configuration注解标记为一个Spring配置类。
l 使用 @EnableWebMvc注解启用基于注解的Spring MVC配置。
l 通过注册TemplateResolver、SpringTemplateEngine和`hymeleafViewResolver Bean来配置Thymeleaf视图解析器。
l 注册ResourceHandler Bean将以URI为 /resource/**的静态资源请求定位到 /resource/目录下。
l 配置MessageSource bean从classpath下加载messages-{国家代码}.properties文件来加载i18n配置。
现在我们没有配置任何i18n内容,所以需要在 src/main/resources文件夹下创建一个空的 messages.properties文件。
步骤4:注册Spring MVC的前端控制器DispatcherServlet
在Servlet 3.x规范之前,我们必须在web.xml中注册Servlet/Filter。由于当前是Servlet 3.x规范,我们可以使用ServletContainerInitializer以编程的方式注册Servlet /Filter。
Spring MVC提供了一个惯例类AbstractAnnotationConfigDispatcherServletInitializer来注册DispatcherServlet。
public class SpringWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer
{
@Override
protected Class<?>[] getRootConfigClasses()
{
return new Class<?>[] { AppConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses()
{
return new Class<?>[] { WebMvcConfig.class };
}
@Override
protected String[] getServletMappings()
{
return new String[] { "/" };
}
@Override
protected Filter[] getServletFilters() {
return new Filter[]{ new OpenEntityManagerInViewFilter() };
}
}
在SpringWebAppInitializer.java配置类中,我们完成了以下操作:
l 我们将 AppConfig.class配置为RootConfigurationClass,它将成为包含了所有子上下文(DispatcherServlet)共享的Bean定义的父ApplicationContext。
l 我们将 WebMvcConfig.class配置为ServletConfigClass,它是包含了WebMvc Bean定义的子ApplicationContext。
l 我们将 /配置为ServletMapping,这意味所有的请求将由DispatcherServlet处理。
l 我们将OpenEntityManagerInViewFilter注册为Servlet过滤器,以便我们在渲染视图时可以延迟加载JPA Entity的延迟集合。
步骤5:创建一个JPA实体和Spring Data JPA资源库
为User实体创建一个JPA实体User.java和一个Spring Data JPA资源库。
@Entity
public class User
{
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
//setters and getters
}
public interface UserRepository extends JpaRepository<User, Integer>
{
}
步骤6:创建一个Spring MVC控制器
创建一个Spring MVC控制器来处理URL为 /,并渲染一个用户列表。
@Controller
public class HomeController
{
@Autowired UserRepository userRepo;
@RequestMapping("/")
public String home(Model model)
{
model.addAttribute("users", userRepo.findAll());
return "index";
}
}
步骤7:创建一个Thymeleaf视图/WEB-INF/views/index.html来渲染用户列表
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8"/>
<title>Home</title>
</head>
<body>
<table>
<thead>
<tr>
<th>Id</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr th:each="user : ${users}">
<td th:text="${user.id}">Id</td>
<td th:text="${user.name}">Name</td>
</tr>
</tbody>
</table>
</body>
</html>
我们都配置好了,可以运行应用了。但在此之前,我们需要在您的IDE中下载并配置像Tomcat、Jetty或者Wildfly等服务器。
您可以下载Tomcat 8并配置在您喜欢的IDE中,之后运行应用并将浏览器指向 http://localhost:8080/springmvc-jpa-demo。您应该看到一个以表格形式展示的用户详细信息列表。
发个小广告!!!走过路过,不要错过!新书来啦!!!
这里有你想买的书!
http://product.dangdang.com/23949549.html#ddclick_reco_reco_relate
麦克叔叔每晚十点说
以上是关于Spring5(一-二)的主要内容,如果未能解决你的问题,请参考以下文章
Spring5学习笔记(14) — “Spring5 声明式事务管理”