分布结构
1、通过spring-boot的配置文件application.properties(注意结尾是es)可以修改一些参数。
2、写一个简单的在页面上显示 hello:
通过以下程序,就能运行起来了,但是不能在页面显示hello
/** 主程序类 必须在包下(最好不要放在需要被扫描的类所在的包里,不然要修改扫描)
* @SpringBootApplication
*/
@SpringBootApplication(scanBasePackages = "boot")//扩展扫描包的范围
public class MainApplication {
public static void main(String[] args) {
//1、返回我们的IOC容器
ConfigurableApplicationContext run=SpringApplication.run(MainApplication.class,args);
}
}
再创建一个Controller包,在包下创建一个类:这两个页面就能达到在页面上显示hello的效果,但是需要自己打开网页输入 localhost:8080/hello
//@ResponseBody //放在这个类的每一个方法,返回的数据都是写给浏览器而不是返回给页面
//@Controller
@RestController//相当于上面两个注解的结合
public class HelloController {
@RequestMapping("/hello")//相当于以前servlet在网址上的输入
public String handle1(){
return "hello spring-boot"+"你好";
}
}
3、在容器中添加组件:
以往是通过xml配置文件,现在也用类来实现:
/**
* 告诉spring-boot这是一个配置类,等同于以前的配置文件 之前是使用bean标签添加组件(对象)
* 使用Bean标签方法,给容器注册组件 默认是单实例
* Myconfig(配置类)其实也相当于一个组件,在容器中
* proxyBeanMethods:代理bean方法 默认为true 全模式full
* 代理对象调用方法 spring-boot总会检擦这人个组件是否在容器 保持单实例
* 如果改为false(轻量级),相当于每次都定义了一个新的对象 解决了组件依赖,因为每个组件可能会依赖或者不依赖其他组件
* @Import({DBHelper.class}) 给容器自动创建出这个类型的组件
* */
@Import({DBHelper.class})//将指定的组件导入
@Configuration //告诉spring-boot这个就作为配置文件了
public class Myconfig {
/**
* 外部不管获取多少次,都是之前注册容器中的对象
* @return
*/
@Bean//给容器添加组件,以方法名作为组件id,返回类型就是组件类型,返回的值就是组件在容器中的值
public User zs(){
//User依赖了Pet组件依赖就用true 否则可以将proxyBeanMethods调为false 这样就很快 就不用每次都扫描一次容器 !!!!!现在好像有依赖必须为true,否则会报错
User zhangsan=new User("法外狂徒张三","男")
zhangsan.setPet(tom());
return zhangsan;
}
@Bean
public User lisi(){
return new User();
}
@Bean("tommmm")//也可以这样直接给组件定义名字而不用方法名
public Pet tom(){
return new Pet("Tom");
}
@Bean
public Pet dog(){
return new Pet();
}
}
在MainApplication类中继续加入,运行后可以查看容器中的所有组件,并且通过一个组件注册的对象是相同的。
//2、查看容器里面的组件
String[]name=run.getBeanDefinitionNames();
for (String x:name)
System.out.println(x);
//从容器中取出注册的组件
User s1=run.getBean("zs", User.class);
User s=run.getBean("zs", User.class);
System.out.println(s.getClass()==s1.getClass());
run.getBeanNamesForType(User.class);//获取这种类型的组件
@Conditional:
条件装配,满足条件才进行装配
在Bean标签上加@ConditionalOnBean(name = “uuu”)//uuu为Bean标签的组件名,当容器中有uuu这个组件时才将这个Bean标签注入,注意!!!!:有先后顺序。
对于已经是用.xml文件创建的组件,在config类上加入
@ImportResource("classpath:beans.xml")//
就能往容器中导入这个文件中的组件
@Component//添加进容器,只有在容器中的组件,才会拥有springboot提供的功能
@ConfigurationProperties(prefix = "mycar")//prefix是配置文件中的前缀例如mycar.price
public class Car {}
如果引用的第三方包,上面没加@Component
,可以在配置文件类config上添加@EnableConfigurationProperties(Car.class)
Car.class为类,也可以将组件自动注册到容器中
使用lombok插件和依赖,在生成的实体类上添加注解@Data
即可自己生成set,get,再加上注解@ToString
,就可以生成toString方法。但是要写属性名和类型。其次@NoArgsConstructor
无参构造器,@AllArgsConstructor
有参构造器
@Slf4j类上加入这个注解,在这个类的方法中使用log.info("请求进来了");
可以不将信息输出在控制台,而是生成一个日志,显示引号中的内容。
以后修改了代码直接ctrl+f9可以帮助自动重启,但不是热更新,热更新插件但是要收费
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
static存放静态资源(css、js等)
templates存放页面
application.properties为配置文件
转的是含义,\n原本为换行,”“双引号没有转变它的意思,但是单引号会
引入以下依赖让.yaml文件也有提示
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
加入这个插件,让processor不打包,打包浪费资源
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>