1:xml文件与javaconfig
1.1.1什么是javaconfig:是spring提供的使用java类配置容器。配置spring IOC容器的纯java方法
优点:可以使用面向对象的方式,一个配置类可以继承配置类,可以重写方法,能够避免繁琐的xml配置
1.1.2:先来看xml容器配置:
创建实体类:
public class Students {
private String name;
private int age;
@Override
public String toString() {
return "Students{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Students(String name, int age) {
this.name = name;
this.age = age;
}
public Students() {
}
}
创建xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student" class="com.ztb.pojo.Students">
<property name="name" value="张三"></property>
<property name="age" value="20"></property>
</bean>
</beans>
测试:
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("applationcontext.xml");
Students student =(Students) context.getBean("student");
System.out.println(student);
}
1.1.3 javaconfig配置容器:
创建实体类:
public class Teacher {
private String name;
private int age;
@Override
public String toString() {
return "Teacher{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Teacher(String name, int age) {
this.name = name;
this.age = age;
}
public Teacher() {
}
}
创建javaconfig类:
@Configuration //@Configuration作用是相当于xml配置文件的作用
//在这个类中有很多方法,方法的返回值是对象。
//在方法上加入@Bean,表示方法返回值的对象放入到容器中
public class SpringJavaConfig {
@Bean //如果@Bean没有使用属性,那么默认对象名称就是方法名,例如下面的要取的bean的名称为teacher
public Teacher teacher(){
Teacher teacher = new Teacher("张老师", 23);
return teacher;
}
@Bean(name = "stu") //name:指定要取的bean对象的名称
public Students students(){
Students students = new Students("张学生", 3);
return students;
}
}
测试:
@Test
public void test2(){
//因为没有使用xml配置文件,所以使用java类代替xml配置文件的作用
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringJavaConfig.class);
Teacher teacher =(Teacher) context.getBean("teacher");
System.out.println(teacher);
}
@Test
public void test3(){
//因为没有使用xml配置文件,所以使用java类代替xml配置文件的作用
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringJavaConfig.class);
Students students =(Students) context.getBean("stu");
System.out.println(students);
}
1.1.4:@ImportResource:@ImportResource作用是导入xml配置文件,等同于xml文件的resources:
代码:
@Configuration
@ImportResource(value = {"classpath:applationcontext.xml"})
public class SystemConfig {
}
xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student11" class="com.ztb.pojo.Students">
<property name="name" value="张三"></property>
<property name="age" value="20"></property>
</bean>
</beans>
测试:
@Test
public void test4(){
//因为没有使用xml配置文件,所以使用java类代替xml配置文件的作用
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SystemConfig.class);
Students students =(Students) context.getBean("student11");
System.out.println(students);
}
1.1.5:@PropertyResource:
@PropertyResource: 读取properties属性配置文件。 使用属性配置文件可以实现外部化配置 ,
在程序代码之外提供数据。
步骤:
-
在resources目录下,创建properties文件, 使用k=v的格式提供数据
-
在PropertyResource 指定properties文件的位置
-
使用@Value(value="${key}")
代码:
@Component("tiger") //把名字为tiger的实体类注入到spring容器中,bean的id为tiger
public class Tiger {
@Value("${tiger.name}")
private String name;
@Value("${tiger.age}")
private int age;
@Override
public String toString() {
return "Tiger{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Tiger(String name, int age) {
this.name = name;
this.age = age;
}
public Tiger() {
}
}
@Configuration
@PropertySource("classpath:config.properties") //把config.properties文件读入进来
@ComponentScan(basePackages = "com.ztb.pojo") //因为实体类已经被注入,所以需要用组件扫描到实体类对象
public class SystemConfig {
}
properties文件:
tiger.name=东北虎
tiger.age=3
测试:
@Test
public void test5(){
//因为没有使用xml配置文件,所以使用java类代替xml配置文件的作用
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SystemConfig.class);
Tiger tiger =(Tiger) context.getBean("tiger");
System.out.println(tiger);
}
1.2.1springboot重要注解:
@SpringBootApplication : @SpringBootApplication 是 一 个 复 合 注 解 , 是 由 @SpringBootConfiguration, @EnableAutoConfiguration ,@ComponentScan 联合在一起组 成的。
@SpringBootConfiguration : 就 是 @Configuration 这 个 注 解 的 功 能 , 使 用 @SpringBootConfiguration 这个注解的类就是配置文件的作用。 @EnableAutoConfiguration:开启自动配置, 把一些对象加入到 spring 容器中。
@ComponentScan:组件扫描器, 扫描注解,根据注解的功能,创建 java bean,给属性赋值 等等。组件扫描器默认扫描的是 @ComponentScan 注解所在的类, 类所在的包和子包。
1.2.2:spring boot的核心配置文件:Spring Boot 的核心配置文件用于配置 Spring Boot 程序,名字必须以 application 开始,有两种格式,一种是properties格式,一种是yml格式,推荐使用yml格式
1.2.2.1 properties文件:可以修改核心配置文件:比如修改端口号和发布项目的路径名:
server.port=9092 和 server.servlet.context-path=/boot
1.2.2.1 yml文件:
server:
port: 9091
servlet:
context-path: /myroot
注意 : 当两种格式配置文件同时存在 ,在 SpringBoot2.4 开始, 使用的是 yml 配置文件. 修改配置名称都为 application。
1.2.2.2 多环境配置:
在实际开发的过程中,我们的项目会经历很多的阶段(开发->测试->上线),每个阶段的配置也会不同,例如:端口、上下文根、数据库等,那么这个时候为了方便在不同的环境 之间切换,SpringBoot 提供了多环境配置,具体步骤如下:为每个环境创建一个配置文件,命名必须以 application-环境标识.properties|yml
在application.properties指定要用哪个环境:spring.profiles.active=test (用的测试环境)
1.2.2.3:@Value注解
@Value("${key}"),key来自application.properties(yml)
例子:在application中:
school.name="海定区"
school.size="2000"
在controller类中:
@Controller
public class HelloSpringBoot {
@Value("${school.name}")
private String name;
@Value("${school.size}")
private String size;
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return "name"+name+"size"+size;
}
}
启动application,访问浏览器
1.2.2.4:将配置文件映射为java对象
对上面的进行优化,由于上面的需要一个一个写value注入值,所以进行的优化为:创建一个实体类,利用@configurationproperties注解进行全部注入
例子:
application配置文件:
school.name="海定区"
school.size="2000"
实体类:
@Component
@ConfigurationProperties(prefix = "school") //会在application配置文件中寻找前缀为school的文件,注入给成员变量
public class School {
private String name;
private String size;
@Override
public String toString() {
return "School{" +
"name='" + name + '\'' +
", size='" + size + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public School(String name, String size) {
this.name = name;
this.size = size;
}
public School() {
}
}
controller类:
@Controller
public class HelloSpringBoot {
@Autowired
private School school;
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return school.getName()+school.getSize();
}
}
1.3 springboot使用jsp
步骤1:导入pom依赖和静态资源处理问题:
<!-- 引入springboot 内嵌的toncat对jsp的解析包,不加解析不了jsp页面-->
<!-- 如果只是使用jsp页面,可以只添加该依赖-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!-- 如果要使用servlet必须添加以下两个依赖-->
<!-- servlet以来的jar包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!-- jsp依赖的jar包-->
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.0.0</version>
</dependency>
<!-- 如果要使用jstl,则必须添加jstl依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<!--SpringBoot 要求 jsp 文件必须编译到指定的
META-INF/resources 目录下才能访问,否则访问不到。-->
<resources>
<resource>
<!-- 源文件位置-->
<directory>src/main/webapp</directory>
<!-- 指定编译到META-INF/resources,该目录不能随便写-->
<targetPath>META-INF/resources</targetPath>
<!--指定要把哪些文件编译进去,**表示 webapp 目录及子
目录,*.*表示所有文件-->
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
2:在main文件夹下创建webapp文件夹,在webapp文件夹中建立index.jsp文件
<body>
这是jsp,${data}
</body>
3.在核心配置文件中加入视图解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
4:编写controll类:
@Controller
public class HelloSpringBoot {
@RequestMapping("/jsp")
public String jsp(HttpServletRequest request){
request.setAttribute("data","存了一个jsp");
return "index";
}
}
5访问浏览器
注意:由于在静态资源处理中把resources写成了resource,导致页面错误,所以一定要严格按照springboot的约定来写
1.4使用容器来获取对象:
可以通过启动类SpringApplication.run(Application.class, args); 返回值获取容器。
例子:
实体类对象注入到spring容器中:
package com.ztb.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component("sc")
@ConfigurationProperties(prefix = "school") //会在application配置文件中寻找前缀为school的文件,注入给成员变量
public class School {
private String name;
private String size;
@Override
public String toString() {
return "School{" +
"name='" + name + '\'' +
", size='" + size + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public School(String name, String size) {
this.name = name;
this.size = size;
}
public School() {
}
}
主启动类获得对象:
@SpringBootApplication
public class Springboot01Application {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Springboot01Application.class, args);
Object sc = context.getBean("sc");
System.out.println(sc);
}
}
一般用于测试是想获取哪个对象的值,直接用容器即可。
标签:String,配置文件,age,简单,name,使用,size,public,SpringBoot From: https://www.cnblogs.com/zhangtaibing/p/16644601.html