Spring5(一-一)

Posted 麦克叔叔每晚10点说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring5(一-一)相关的知识,希望对你有一定的参考价值。

大家都知道,Spring是一个非常受欢迎的Java框架,它被用来构建web和企业应用,不像许多其他框架只关注一个领域,Spring框架提供了各种功能,通过项目组合来满足当代业务需求。Spring框架提供了多种灵活的方式配置Bean。例如XML、注解和Java配置。随着功能数量的增加,复杂性也随之增加,配置Spring应用将变得乏味而且容易出错,因此,Spring团队创造了Spring Boot框架以解决配置复杂的问题。在开始Spring Boot之前,我们快速地看一下Spring框架,看看Spring Boot正在决解什么样的问题。


Spring很受欢迎的原因,可能有几点:

  • Spring的依赖注入方式鼓励编写可测试代码。

  • 具备简单但功能强大的数据库事务管理功能

  • Spring简化了与其他Java框架的集成工作,比如JPA/Hibernate ORM和Struts/JSF等web框架。

  • 构建web应用最先进的Web MVC框架。


Spring的一些兄弟项目,可以帮助构建满足当代业务需求的应用:

  • Spring Data:简化了关系数据库和NoSQL数据存储的数据访问。

  • Spring Batch:提供强大的批处理框架。

  • Spring Security:用于保护应用的强大的安全框架。

  • Spring Social:支持与Facebook、Twitter、Linkedin、Github等社交网站集成。

  • Spring Integration:实现了企业集成模式,以便于使用轻量级消息和声明式适配器与其他企业应用集成。


Spring框架使用入门示例

Spring框架初始仅提供了基于XML的方式来配置Bean,后来引入了基于XML的DSL、注解,以及基于Java配置的方式。我们逐一谈谈:


基于XML的配置

<bean id="userService" class="com.sivalabs.myapp.service.UserService">

    <property name="userDao" ref="userDao"/>

</bean>

<bean id="userDao" class="com.sivalabs.myapp.dao.JdbcUserDao">

    <property name="dataSource" ref="dataSource"/>

</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>

    <property name="url" value="jdbc:mysql://localhost:3306/test"/>

    <property name="username" value="root"/>

    <property name="password" value="secret"/>

</bean>


基于注解的配置

@Service

public class UserService

{

    private UserDao userDao;

    @Autowired

    public UserService(UserDao   dao){

          this.userDao = dao;

    }

    ...

    ...

}

@Repository

public class JdbcUserDao

{

    private DataSource dataSource;

    @Autowired

    public JdbcUserDao(DataSource   dataSource){

        this.dataSource =   dataSource;

    }

    ...

    ...

}


基于Java配置

@Configuration

public class AppConfig

{

    @Bean

    public UserService   userService(UserDao dao){

        return new   UserService(dao);

    }

    @Bean

    public UserDao   userDao(DataSource dataSource){

        return new   JdbcUserDao(dataSource);

    }

    @Bean

    public DataSource dataSource(){

        BasicDataSource   dataSource = new BasicDataSource();

          dataSource.setDriverClassName("com.mysql.jdbc.Driver");

          dataSource.setUrl("jdbc:mysql://localhost:3306/test");

        dataSource.setUsername("root");

          dataSource.setPassword("secret");

        return   dataSource;

    }

}


一个使用了Spring MVC和JPA(Hibernate)的web应用


步骤1:配置Maven依赖

首先我们需要做的是配置pom.xml中所需的依赖。


<?xml version="1.0"   encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

                            http://maven.apache.org/maven-v4_0_0.xsd">

      <modelVersion>4.0.0</modelVersion>

      <groupId>com.sivalabs</groupId>

      <artifactId>springmvc-jpa-demo</artifactId>

      <packaging>war</packaging>

      <version>1.0-SNAPSHOT</version>

      <name>springmvc-jpa-demo</name>

    <properties>

          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

          <maven.compiler.source>1.8</maven.compiler.source>

          <maven.compiler.target>1.8</maven.compiler.target>        

          <failOnMissingWebXml>false</failOnMissingWebXml>

    </properties>

    <dependencies>

          <dependency>

              <groupId>org.springframework</groupId>

              <artifactId>spring-webmvc</artifactId>

              <version>4.2.4.RELEASE</version>

          </dependency>

          <dependency>

              <groupId>org.springframework.data</groupId>

              <artifactId>spring-data-jpa</artifactId>

              <version>1.9.2.RELEASE</version>

          </dependency>

          <dependency>

              <groupId>org.slf4j</groupId>

              <artifactId>jcl-over-slf4j</artifactId>

              <version>1.7.13</version>

          </dependency>

          <dependency>

              <groupId>org.slf4j</groupId>

              <artifactId>slf4j-api</artifactId>

              <version>1.7.13</version>

          </dependency>

          <dependency>

              <groupId>org.slf4j</groupId>

              <artifactId>slf4j-log4j12</artifactId>

              <version>1.7.13</version>

          </dependency>

          <dependency>

              <groupId>log4j</groupId>

              <artifactId>log4j</artifactId>

              <version>1.2.17</version>

          </dependency>

          <dependency>

              <groupId>com.h2database</groupId>

              <artifactId>h2</artifactId>

              <version>1.4.190</version>

          </dependency>

          <dependency>

              <groupId>commons-dbcp</groupId>

              <artifactId>commons-dbcp</artifactId>

              <version>1.4</version>

          </dependency>

          <dependency>

              <groupId>mysql</groupId>

              <artifactId>mysql-connector-java</artifactId>

              <version>5.1.38</version>

          </dependency>

          <dependency>

              <groupId>org.hibernate</groupId>

              <artifactId>hibernate-entitymanager</artifactId>

              <version>4.3.11.Final</version>

          </dependency>

          <dependency>

              <groupId>javax.servlet</groupId>

              <artifactId>javax.servlet-api</artifactId>

              <version>3.1.0</version>

              <scope>provided</scope>

          </dependency>

          <dependency>

              <groupId>org.thymeleaf</groupId>

              <artifactId>thymeleaf-spring4</artifactId>

              <version>2.1.4.RELEASE</version>

          </dependency>

    </dependencies>

</project>

 

   


我们配置了所有的Maven jar依赖,包括Spring MVC、Spring Data JPA、JPA/Hibernate、Thymeleaf和Log4j。


步骤2:使用Java配置配置Service/DAO层的Bean

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories(basePackages="com.sivalabs.demo")

@PropertySource(value = { "classpath:application.properties" })

public class AppConfig

{

    @Autowired

    private Environment env;

    @Bean

    public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer()

    {

        return new PropertySourcesPlaceholderConfigurer();

    }

    @Value("${init-db:false}")

    private String initDatabase;

    @Bean

    public PlatformTransactionManager transactionManager()

    {

        EntityManagerFactory factory = entityManagerFactory().getObject();

        return new JpaTransactionManager(factory);

    }

    @Bean

    public LocalContainerEntityManagerFactoryBean entityManagerFactory()

    {

        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();

        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

        vendorAdapter.setGenerateDdl(Boolean.TRUE);

        vendorAdapter.setShowSql(Boolean.TRUE);

        factory.setDataSource(dataSource());

        factory.setJpaVendorAdapter(vendorAdapter);

        factory.setPackagesToScan("com.sivalabs.demo");

        Properties jpaProperties = new Properties();

        jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));

        factory.setJpaProperties(jpaProperties);

        factory.afterPropertiesSet();

        factory.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());

        return factory;

    }

    @Bean

    public HibernateExceptionTranslator hibernateExceptionTranslator()

    {

        return new HibernateExceptionTranslator();

    }

    @Bean

    public DataSource dataSource()

    {

        BasicDataSource dataSource = new BasicDataSource();

        dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));

        dataSource.setUrl(env.getProperty("jdbc.url"));

        dataSource.setUsername(env.getProperty("jdbc.username"));

        dataSource.setPassword(env.getProperty("jdbc.password"));

        return dataSource;

    }

    @Bean

    public DataSourceInitializer dataSourceInitializer(DataSource dataSource)

    {

        DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();

        dataSourceInitializer.setDataSource(dataSource);

        ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();

        databasePopulator.addScript(new ClassPathResource("data.sql"));

        dataSourceInitializer.setDatabasePopulator(databasePopulator);

        dataSourceInitializer.setEnabled(Boolean.parseBoolean(initDatabase));

        return dataSourceInitializer;

    }  

}


发个小广告!!!走过路过,不要错过!新书来啦!!!

Spring5(一-一)
Spring5(一-一)
Spring5(一-一)

这里有你想买的书!

http://product.dangdang.com/23949549.html#ddclick_reco_reco_relate

麦克叔叔每晚十点说


以上是关于Spring5(一-一)的主要内容,如果未能解决你的问题,请参考以下文章

Spring5(一-二)

Spring5学习笔记(14) — “Spring5 声明式事务管理”

Spring5学习笔记(14) — “Spring5 声明式事务管理”

[SSM]Spring5

[SSM]Spring5

尚硅谷Spring学习笔记-- Spring5新功能