springboot

1@Configuration配置类

@Configuration相当于applicationcontext.xml

1.1用注解向spring注册

1.1.1@Bean

@Configuration
public class ApplicationConfig {

    /**
     * @Bean : Spring的bean的定义标签 ,标记方法返回的对象交给Spring容器管理
     */
    @Bean
    public MyBean myBean(){
        return new MyBean();
    }
}
>* bean的id:  方法名 
>*  bean的name:可以通过 @Bean标签的name属性指定
>* 生命周期方法:initMethod , destroyMethod
>* 单利多利: @Scope("prototype")
>* 懒初始化: @Lazy

1.1.2@ComponentScan

@Configuration
@ComponentScan("包名")
public class ApplicationConfig {
}
ComponentScan是ioc组件自动扫描,相当于是  context:component-scan base-package=*     

 默认扫描当前包,及其子包 ;

ComponentScan.lazyInit  :懒初始化

ComponentScan.excludeFilters :排除

1.1.3@conditional

Conditional注解帖在bean的定义方法上来判断,如果不满足条件就不会定义bean

 	@Bean
    @Conditional(value = MyCondition.class)
    public MyBean windowsMyBean(){
        return new MyBean("windowMyBean");
    }
    @Bean
    @Conditional(value = LinuxCondition.class)
    public MyBean linuxMyBean(){
        return new MyBean("linuxMyBean");
    }

定义条件类

public class MyCondition implements Condition {

    /**
     * 匹配方法,返回值决定是否满足条件
     */
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        //获取系统环境
        String systemName = context.getEnvironment().getProperty("os.name");

        if("Windows 10".equals(systemName)){
            return true;
        }
        return false;
    }
}

1.1.4@Import

直接导入bean或者配置类

@Configuration
@Import(ApplicationOtherConfig.class)	//导入其他的配置类
public class ApplicationConfig

导入选择器

@Configuration
@Import(MyImportSelector.class)	//导入选择器
public class ApplicationConfig

定义选择器

public class MyImportSelector implements ImportSelector {

    //选择导入,该方法返回我们需要导入的类的全限定名
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{
                "com.wal.MyBean",
                "com.wal.OtherBean"};
    }
}

1.1.4 factoryBean 定义bena

定义factoryBean

public class MyBeanFactoryBean implements FactoryBean<MyBean> {
    public MyBean getObject() throws Exception {
        return new MyBean();
    }

    public Class<?> getObjectType() {
        return MyBean.class;
    }

    public boolean isSingleton() {
        return true;
    }
}

将MyFactoryBean向spring容器注册
当需要注入MyBean时spring容器会通过工厂中的getObject得到需要的实例

@Configuration
public class ApplicationConfig {

    @Bean
    public MyBeanFactoryBean myBean(){
        return new MyBeanFactoryBean();
    }
}

2bean的生命周期

**MyBean实现InitializingBean初始化接口, DisposableBean销毁接口
**

public class MyBean implements InitializingBean, DisposableBean {
    public MyBean(){
        System.out.println("创建.............");
    }
    public void destroy() throws Exception {
        System.out.println("destroy方法...........");
    }
    public void afterPropertiesSet() throws Exception {
        System.out.println("初始化方法...........");
    }
}

BeanPostProcessor后置处理器
所有的bean都会执行该方法

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("初始化之前.....:"+bean);
        return bean;
    }

    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("初始化之后.....:"+bean);
        return bean;
    }
}

3SpringBoot读取配置

使用@Value读取

@Component
public class Employee {
    @Value("${employee.username}")
    private String username;
    @Value("${employee.age}")
    private Integer age;

使用@ConfigurationProperties读取
**
@ConfigurationProperties : 自动的根据前缀从配置中过滤出配置项目,然后根据当前对象的列名进行匹配,自动赋值**

@Component
@ConfigurationProperties(prefix = "employee")
public class Employee {
    private String username;
    private Integer age;

SpringBoot默认读取application.yml和application.properties

application.yml
employee:
  username: "二狗"
  age: 12

4日志使用

MySpringBootTest.class日志的使用环境
private Logger logger = LoggerFactory.getLogger(MySpringBootTest.class);
 logger.error("error.....");
 logger.warn("warn.....");
 logger.info("info.....");
logger.debug("debug.....");
logger.trace("trace.....");

4.1指定日志配置文件

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="60 seconds">
    <!-- 日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n"/>

    <!--ConsoleAppender 用于在屏幕上输出日志-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定义控制台输出格式-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--生成日志文档-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>logs/springboot.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/springboot-%d{yyyyMMdd}-%i.log.gz</fileNamePattern>
            <maxFileSize>1KB</maxFileSize>
            <maxHistory>30</maxHistory>
            <!--总上限大小-->
            <totalSizeCap>5GB</totalSizeCap>
        </rollingPolicy>
        <!--定义控制台输出格式-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>

    </appender>
    <!--root是默认的logger 这里设定输出级别是debug-->
    <root level="info">
        <!--定义了两个appender,日志会通过往这两个appender里面写-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </root>
    <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
    <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
    <logger name="com.wal" level="info" additivity="false">
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </logger>
</configuration>

5springBoot集成Thymeleaf

导入依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
 </dependency>

 模板
 <html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>成功!</h1>
    <!--使用语法th:text 将div里面的文本内容设置为 -->

    <div th:text="${msg}">这是显示欢迎信息</div>
</body>
</html>

5.1webjars

导入jquery依赖 ( http://www.webjars.org/)

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.4.1</version>
</dependency>

<script src="/webjars/jquery/3.4.1/jquery.js"></script>

6自定义拦截器MyHandlerInterceptor

//自定义拦截器
//需要通过配置类添加到拦截器中
@Component
public class MyHandlerInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("你被拦截了。。。。。");
        return true;
    }
}

注册拦截器

public class Springboot2Application implements WebMvcConfigurer {
    @Autowired
    private MyHandlerInterceptor myHandlerInterceptor;
    //添加自定义拦截器的方法
    @Override
    public void addInterceptors(InterceptorRegistry registry) {     registry.addInterceptor(myHandlerInterceptor).addPathPatterns("/**");
    }
    //视图控制器,不需要写controller,就可以访问对应资源
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/xxx").setViewName("xxx");
    }

7集成DataSource

导入依赖

<!--导入阿里巴巴连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.20</version>
        </dependency>
        <!--导入mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

application.yml

#配置连接池dataSource
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql:///crm?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

8集成mybatis

<!--导入mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

application.yml

#映射器xml路径
mybatis:
  mapper-locations: classpath:com/wal/springboot2/mapper/*Mapper.xml

配置类

//扫描映射器
@MapperScan(basePackages = "com.wal.springboot2.mapper")
public class Springboot2Application

9集成事务

开启事务管理器

@EnableTransactionManagement
public class ApplicationConfig{
...}

service打事务标签

@Transactional
@Service
public class EmployeeServiceImpl

10PageHelper使用

导入依赖

<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
</dependency>
 <select id="findPage" resultType="com.wal.springboot2.domain.Employee">
        select te.username,te.password from t_employee te
 </select>

用了pagehelper之后 ,查询总条数的sql不用写 , limit 不用写
查询

@Override
    public Page<Employee> selectPage() {
        PageHelper.startPage(1,5 );
        Page<Employee> page = (Page<Employee>) employeeMapper.selectPage();
        return  page;
    }

**
PageHelper.startPage(1,5 ):设置当前页和每页条数

Page :是pagehelper自己封装的页面对象,里面有总条数,列表,总页数等等**

11@EnableAutoConfiguration

@EnableAutoConfiguration利用AutoconfigurationImportSelector
将组件导入spring容器中。
AutoConfigurationImportSelector选择器利用用SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/spring.factories的jar包,如果spring容器中没有该类的实例就会用@Bean的形式向spring容器注册实例,注册实例时会通过@configurationProperties读取配置文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值