创立我的项目
一、
任何我的项目都得有一个启动入口, 在 springboot 的启动类中,须要应用 @SpringBootApplication 注解进行形容,并且在类中会有一个 main 办法,main 办法运行时会读取配置文件,并加载指定资源,而后进行性初始化操作。
package cn.wl;
import java.util.Arrays;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// 启动项
@SpringBootApplication
public class WlSpringboot1Application implements CommandLineRunner {public static void main(String[] args) {
/* mian 办法由 jvm 调用
* args jvm 运行时给 main 办法传值 111 222 333
* run(将 args 中的参数传给了 SpringBoot)而后再传递给 run()办法中的
* args
* */
SpringApplication.run(WlSpringboot1Application.class, args);
System.out.println("WlSpringboot1Application.main()");
System.out.println("main.args=" + Arrays.toString(args));
}
/* 在此办法中能够获取 Spring 容器的一些初始化资源 */
@Override
public void run(String... args) throws Exception {System.out.println("run.args=" + Arrays.toString(args));
}
}
二、
- 在 SpringBoot 工程中如何将一个类的实例交给 spring 创立和治理
- 1. 将类放在启动包所在的包或者子类包
- 2. 将类应用 spring 框架指定注解进行形容,@Component
- @Component 是 Spring 中用于形容 Bean 类的一个注解。
- 用于通知 Spring 这个类的实例由 Spring 创立,
- 当此对象由 Spring 创立和治理时,默认会将对象存储到池(Bean 池)中。
@Component
public class DefaultTest {
}
三、
- 1.Springboot 我的项目中配置起源?
- 2.springboot 我的项目中的资源加载?(资源能够了解为咱们的 class 文件)
- JDK 类文件 Spring 类文件 本人定义的类文件
- 3.SpringBoot 中的我的项目资源初始化?
- a. 构建实例对象 b. 基于对象存储数据
- 跟踪类加载:-XX:+TranceClassLoading
@SpringBootTest
public class DefaultCacheTests {
@Autowired
private DefaultCache defaultCache;
@Test
public void testDefault() {System.out.println(defaultCache);
}
四、
NoSuchBean Spring 容器中没有这个 Bean
- 1. 类的包是否在启动包或启动包的子包
- 2. 类是否应用了 Spring 的特定注解
五、
- 1.@Lazy 通知 spring 框架,它形容的类的实例,如果临时用不到就先不创立
- 2. 如果将此类交给 spring 治理,请问 spring 何时创立此对象?
- 3. 一个对象创立后长时间不必,在内存中会有什么影响
- 4.Spring 中 Bean 对象的提早加载个性
- 5. 什么场景适宜提早加载?(大对象、用的少的)
-
- @PostConstruct 形容的办法会在对象结构当前执行,即构造方法执行当前执行,用于执行初始化操作。
- 7.@PreDestroy 注解形容办法会在 (单例) 对象销毁之前执行。Spring 框架会销毁单例对象,但多例对象不会被销毁
-
- 默认单例作用域 singleton ,prototype 每次创立实例都会新建一个新的对象
@Scope(“prototype”)
利用场景
- singleton:常常应用, 须要回收重要资源 (数据库连贯等) 的事宜配置为 singleton,
- prototype: 应用较少时 如果配置为 prototype 须要利用确保资源失常回收。
- 有状态的 Bean 配置成 singleton 会引发未知问题,能够思考配置为 prototype。
// 提早策略
@Lazy
// 默认单例
@Scope("prototype")
@Component
public class ObjectPool {public ObjectPool() {System.out.println("ObjectPool.ObjectPool()构造方法执行了");
}
@PostConstruct
public void init() {System.out.println("ObjectPool.init()初始化");
}
@PreDestroy
public void close() {System.out.println("ObjectPool.close()销毁");
}
}
@SpringBootTest
public class ObjectPoolTests {
@Autowired
private ObjectPool objectPool1;
@Autowired
private ObjectPool objectPool2;
@Test
public void testPool() {System.out.println(objectPool1 == objectPool2);
}
}
@Lazy 为 false 运行启动程序,调用程序时,会主动加载 @Component 正文的类
@Lazy 为 true 时,则不会
5.JVM 内存参数
JVM 参数:-Xms5 最小堆 -Xmx5 最大堆
8.
通过对下面大节的学习,能说说 Spring 框架治理 Bean 对象有什么劣势吗?(面试)
Spring 框架能够为由它治理的对象(Bean)提供懒加载策略(对象临时用不到,则无需加载和实例化),作用域(例如 singleton- 频繁用时能够思考内存中只有一份,prototype- 应用次数少时能够用时创立,不必时销毁),生命周期办法(更好实现对象的初始化和资源销毁),以实现对象对系统资源的无效应用。同时 Spring 框架还能够基于用户设计治理对象与对象的依赖关系,以升高对象与对象之间的间接耦合,进步程序的可维护性和可扩展性。