创建项目
一、
任何项目都得有一个启动入口,在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框架还可以基于用户设计管理对象与对象的依赖关系,以降低对象与对象之间的直接耦合,提高程序的可维护性和可扩展性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。