spring-boot-blog项目代码解读

public class CoreApplication extends SpringBootServletInitializer
{
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(this.getClass());
    }

若打包成war包,则需要继承 SpringBootServletInitializer 并重写configure()方法:打包成war的话,如果打包之后的文件中没有web.xml文件的话它可以自己加进去一个最简单的web.xml(只有根节点的定义,而没有子元素),防止因缺乏web.xml文件而部署失败

@SpringBootApplication
@EnableTransactionManagement
public class CoreApplication extends SpringBootServletInitializer
{
    @Bean(initMethod = "init", destroyMethod = "close")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return new DruidDataSource();
    }

    @Bean
    public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mapper/*Mapper.xml"));
        return sqlSessionFactoryBean.getObject();
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。

@EnableTransactionManagement // 启动注解事务管理,等同于xml配置方式的 <tx:annotation-driven />,启动类中添加如下方法,(Debug测试—),就能知道自动注入的是 PlatformTransactionManager(平台事务管理) 接口的哪个实现类。通过添加@Bean,我们可以人为的指定使用哪个事务管理器,

在Spring容器中,我们手工注解@Bean 将被优先加载,框架不会重新实例化其他的 PlatformTransactionManager 实现类。

然后在Service中,被 @Transactional 注解的方法,将支持事务。如果注解在类上,则整个类的所有方法都默认支持事务。

还可通过@Bean(name = "txManager1"),@Bean(name = "txManager2")进行多事务的处理。

@MapperScan

使用@MapperScan可以指定要扫描的Mapper类的包的路径。

插曲:

springboot的启动类可以理解为spring容器的初始化,它与xml配置形式启动类似,配置好事务,配置好bean,配置好数据库等等。

public class ContentVo implements Serializable {}

实体类实现序列化接口。Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。一个类只有实现了Serializable接口,它的对象才是可序列化的

什么情况下需要序列化:

        1.     当你想把的内存中的对象写入到硬盘的时候。(即对象的持久化操作的时候)

        2.     当你想用套接字在网络上传送对象的时候。

在进行Java的Socket编程的时候,你有时候可能要传输某一类的对象,那么也就要实现Serializable接口。最常见的你传输一个字符串,它是JDK里面的类,也实现了Serializable接口,这样做为的是将数据变为二进制来传输,所以可以在网络上传输。

            3.     当你想通过RMI(远程调用接口)传输对象的时候。

通过远程的方法调用(RMI)去调用一个远程对象的方法,如在计算机A中调用另一台计算机B的对象的方法,那么你需要通过JNDI服务获取计算机B目标对象的引用,将对象从B传送到A,就需要实现序列化接口。(对象在计算机之间的传递调用)。

猜你喜欢

转载自www.cnblogs.com/goodshred/p/9861132.html