SpringApplication.run(Application.class, args);

run方法执行后会得到spring容器,spring容器在根据添加到类上的注解操作、执行类。

两种容器配置方式 xml方式 、config方式

xml

spring xml配置容器 spring中提到过ApplicationContext ctx=new ClassPathXmlApplicationContext();

config

javaconfig配置容器 ApplicationContext ctx =new AnnotationConfigApplicationContext(SpringConfig. class)
AnnotationConfigApplicationContext类

JavaConfig 注入实例三种方式

1.bean

@Configuration:放在类的上面, 这个类相当于 xml 配置文件,可以在其中声明 bean
@Bean:放在方法的上面, 方法的返回值是对象类型, 这个对象注入到 spring ioc 容器

@Configuration
public class SpringConfig {
    @Bean
    public Student createStudent(){
    Student s1  = new Student();
    }

2.@ImportResource

@ImportResource 是导入 xml 配置

@ImportResource(value = "classpath:applicationContext.xml")位于配置类上

3.@PropertyResource

@PropertyResource 是读取 properties 属性配置文件

@PropertySource(value = "classpath:config.properties")位于配置类上

以上还在springzhong

以下在springboot中

springboot重要注解

@SpringBootApplication 是 一 个 复 合 注 解 , 是 由

@SpringBootConfiguration, @EnableAutoConfiguration ,@ComponentScan 联合在一起组
成的。

@SpringBootConfiguration : 就 是 @Configuration 这 个 注 解 的 功 能 , 使 用

@SpringBootConfiguration 这个注解的类就是配置文件的作用。

@EnableAutoConfiguration:开启自动配置, 把一些对象加入到 spring 容器中。

@ComponentScan:组件扫描器扫描@Componentscan注释的类,可以得到该类的实例对象

Spring Springt Boot 核心配置文件

Spring Boot 的核心配置文件用于配置 Spring Boot 程序,名字必须以 application 开始

.properties 默认采用改配置文件

server.port=9092
server.servlet.context-path=/boot

yml

yml 采用一定的空格、换行等格式排版进行配置。

server:
port: 9091
servlet:
context- - path: /boot

多环境配置

自定义配置(也就是赋值)

@Value

@Value("${server.port}") 可直接赋值
    private Integer port;

 @Value("${school.name}") , school.name来自 application.properties(yml)
配置文件中
 school.name=你好


 读取配置文件数据
 @Value("${school.name}")
private String name;

@ConfigurationProperties 用于类上,用配置文件中的值给该类的属性赋值

注释
@ConfigurationProperties(prefix = "school")
public class SchoolInfo {}
注入(赋值)
@Resource
    private SchoolInfo info;

获取容器对象并从容器中取出对象

获取容器对象
ApplicationContext ctx = SpringApplication.run(Application.class, args);


## 从容器者获取对象
		UserService userService = (UserService) ctx.getBean("userService");

		userService.sayHello("李四");

userService类 标明可注入容器
@Service("userService")
public class UserServiceImpl implements UserService {

CommandLineRunner类

开发中可能会有这样的情景。需要在容器启动后执行一些内容。比如读取配置文件,数据库连接之类的。SpringBoot 给我们提供了两个接口来帮助我们实现这种需求。这两个接口分别为 CommandLineRunner 和 ApplicationRunner。他们的执行时机为容器启动完成的时候。
这两个接口中有一个 run 方法,我们只需要实现这个方法即可。这两个接口的不同之处在 于 : ApplicationRunner 中 run 方 法 的 参 数 为 ApplicationArguments , 而CommandLineRunner接口中 run 方法的参数为 String 数组

@SpringBootApplication
public class Application implements CommandLineRunner {
    @Resource
	private HelloService helloService;

	public static void main(String[] args) {
		System.out.println("准备创建容器对象");
		//创建容器对象
		SpringApplication.run(Application.class, args);
		System.out.println("容器对象创建之后");
	}

	@Override
	public void run(String... args) throws Exception {

		String str  = helloService.sayHello("lisi");
		System.out.println("调用容器中的对象="+str);
		//可做自定义的操作,比如读取文件, 数据库等等
		System.out.println("在容器对象创建好,执行的方法");
	}
}

使用拦截器

自定义拦截器

实现HandlerInterceptor

public class LoginInterceptor implements HandlerInterceptor  {
	重写preHandle
	@Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("执行了LoginInterceptor的preHandle");
        return true;

在配置类中调用拦截器

自定义配置类MyAppConfig
WebMvcConfigurer配置接口

@Configuration
public class MyAppConfig implements WebMvcConfigurer {

    //添加拦截器对象, 注入到容器中
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        //创建拦截器对象
        HandlerInterceptor interceptor = new LoginInterceptor();

        //指定拦截的请求uri地址
        String path []= {"/user/**"};
        //指定不拦截的地址
        String excludePath  [] = {"/user/login"};
	//调用拦截器
	//registry类
        registry.addInterceptor(interceptor)
                .addPathPatterns(path)
                .excludePathPatterns(excludePath);

    }
}

使用servelet 意义在于可使用tomcat中的类

先写一个servlet

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       。。。
    }
}

创建配置类,

配置类加了@Configuration,spring会把该类加到容器中,自动配置,在配置类中,创建ServletRegistrationBean对象,ServletRegistrationBean对象是一个对servlet进行配置的对象。此时使用ServletRegistrationBean对象,对servlet进行请求路径等功能的配置;

@Configuration
public class WebApplictionConfig {
    //定义方法, 注册Servlet对象
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        ServletRegistrationBean bean = new ServletRegistrationBean();
        bean.setServlet( new MyServlet());
        bean.addUrlMappings("/login","/test"); // <url-pattern>
        return bean;
    }

使用过滤器filter

与使用servelet思路一样

创建filter

public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("执行了MyFilter,doFilter ");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

创建controller

public class CustomFilterController {

    @RequestMapping("/user/account")
    @ResponseBody
    public String userAccount(){
        return "user/account";
    }

配置 filter 创建filter配置类对象对filter进行配置,FilterRegistrationBean bean = new FilterRegistrationBean();

@Configuration
public class WebApplicationConfig {

    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        FilterRegistrationBean bean  = new FilterRegistrationBean();
        bean.setFilter( new MyFilter());
        bean.addUrlPatterns("/user/*");
        return bean;
    }
}

运行就可以使用filter

字符集过滤器使用 -------CharacterEncodingFilter

与servelet使用思路一样

FilterRegistrationBean对象setFilter(CharacterEncodingFilter对象)

在 application.properties , 禁用 Spring Boot 中默认启用的过滤器`

server.servlet.encoding.enabled=false

在 application.properties 设置过滤器

#设置 spring boot 中 CharacterEncodingFitler 的属性值
server.servlet.encoding.enabled= true
server.servlet.encoding.charset=utf-8
#强制 request, response 使用 charset 他的值 utf-8
server.servlet.encoding.force= true

@Mapper Scan

在 Dao 接口上面加入@Mapper,需要在每个接口都加入注解。 当 Dao 接口多的时候不方便。
可以在主类上添加注解包扫描:@MapperScan(“com.bjpowernode.dao”),这样就不用一个接口加一个@Mapper了
意思就是批量导入一个包中的所有映射接口

@SpringBootApplication
@MapperScan(basePackages = {"com.bjpowernode.dao","com.bjpowernode.mapper"})
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}

mapper.xml文件与java文件分开

mapper 文件放在 resources 目录下, java 代码放在 src/main/java。
实现步骤:
➢ 在 resources 创建自定义目录,例如 mapper, 存放 xml 文件
➢ 把原来的 xml 文件剪切并拷贝到 resources/mapper 目录
➢ 在 application.properties 配置文件中指定映射文件的位置,这个配置只有接口和映
射文件不在同一个包的情况下,才需要指定。

#指定mapper文件的位置
mybatis.mapper-locations=classpath:mapper/*.xml

事务支持

➢ 在入口类中使用注解 @EnableTransactionManagement 开启事务支持

➢ 在访问数据库的 Service 方法上添加注解 @Transactional 即可

接口架构风格 —restful

比如我们要访问一个 http 接口:http://localhost:8080/boot/order?id=1021&status=1
采用 RESTFul 风格则 http 地址为:http://localhost:8080/boot/order/1021/1

result注释

@PathVariable

获取url中的数据

@PostMapping

处理和接收post请求

@DeleteMapping

@PutMapping

@GetMapping

实例

@RestController
public class MyRestController {
//http://localhost:8080/myboot/student/1002
    @GetMapping("/student/{stuId}")
    public String  queryStudent(@PathVariable("stuId") Integer  studentId){
        return "查询学生studentId="+studentId;
    }

resutfu风格访问与普通访问不能通用

启用 HiddenHttpMethodFilter 这个过滤器, 支持 post 请求转为 put,delete
spring.mvc.hiddenmethod.filter.enabled=true

使用redis

Spring Boot 中使用 RedisTemplate 模版类操作 Redis 数据
spring boot 会在容器中创建两个对象 RedisTemplate ,StringRedisTemplate

使用RedisTemplate

通过redisTemplate.opsForValue();得到可以操作redis数据库的对象,就可以操作数据库了

ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("myname","lisi");

使用StringRedisTemplate对象

stringRedisTemplate.opsForValue().set(k,v);

流程

pom.xml添加依赖

< dependency>
< groupId>org.springframework.boot</ groupId>
www.bjpowernode.com  69 / 137 Copyright©动力节点
< artifactId>spring-boot-starter-data-redis</ artifactId>
</ dependency>

核心配置文件 核心配置文件 application .properties

#指定 redis
spring.redis.host=localhost
spring.redis.port=6379
#spring.redis.password=123456

调用

打包

war包

打成war包,使用 Spring Boot 的 maven 插件将 Springboot 程序打成 war 包,单独部署在 tomcat 中运行(上线部
署 常用)部署在tomcat目录webapps 下

jar包

用 maven 将 Spring Boot 安装为一个 jar 包,使用 Java 命令运行
java -jar springboot-xxx.jar

thymeleaf