经过测试可以知道
优先级的次序为: properties>yml>yaml
点开之后就是这个页面的模样,在右边把如图所示的一个程序实参的选项勾选上之后左边就可以自定义修改。
修改完成后重启项目就可以看见端口号被修改为10010,这里命令行参数的属性配置优先级比java系统属性配置的优先级要高
把命令行配置去掉之后java系统配置就生效了
如图所示,在打包完整个项目之后可以在运行jar包的命令前后指定java系统属性和命令行参数
在右边maven选项里面点击package就可以自打包,打包完之后就可以在左边target目录下面看见一个.jar后缀的文件
这里在文件夹上输入cmd就可以进入该文件夹下的专属cmd窗口, 输入java查看所有命令
如果输入java没有反应的话就是jdk的系统变量没有配置好,就去环境变量里面配置java_home还有path下的bin目录和jre目录,另外假如jak版本过高的话是没有jre文件夹的
需要在安装jdk的路径里面的cmd窗口下执行下面的命令生成
bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
还有要注意的就是,环境变量里面选择的jdk版本要和项目的jdk版本一致,不然运行不了。
搞定好上面这些之后先直接运行一次
这里如果出现如上错误就是端口被占用了
正常运行后如下
指定命令行参数和java系统属性后再次运行
java -jar -Dserver.port=9000 springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=10010
五种配置方式的优先级如下
命令行参数》java系统属性》properties》yml》yaml
准备好如下的项目结构环境
图中的三层架构的三个文件都已经是IOC容器里面的bean对象。
从IOC容器中获取bean对象
要先获取IOC容器对象,这里可以使用@Autowired注解自动注入
使用IOC容器对象的方法,来根据名称获取时获取到的默认是Object类型,要进行类型的强转。
在test目录下
@Autowired
private ApplicationContext applicationContext; //IOC容器对象
//获取bean对象
@Test
public void testGetBean(){
//根据bean的名称获取
DeptController bean1 = (DeptController) applicationContext.getBean("deptController");
System.out.println(bean1);
//根据bean的类型获取
DeptController bean2 = applicationContext.getBean(DeptController.class);
System.out.println(bean2);
//根据bean的名称 及 类型获取
DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);
System.out.println(bean3);
}
要解决上面的单例问题,涉及到bean的作用域,
通过@Scope注解配置作用域
IOC容器中的单例bean对象都是在项目启动的时候直接实例化一次,非单例的都是在调用时才初始化。
这里可以使用一个@Lazy延迟单例对象的初始化,直到第一次使用时才实例化。
通常可以使用component以及它的三个衍生注解就可以声明bean对象。
对于没有办法直接在类上加注解的第三方bean对象,可以声明一个方法返回值为该类,在方法里面new一个,然后在外面加上@Bean注解将该方法的返回值直接交给IOC容器管理。
在一般的bean对象中要想实现依赖注入一般都是直接使用@Autowired直接就行了,
在第三方bean中国要想使用依赖注入可以通过bean对象的方法形参传进去。是spring容器会进行自动装配
@Configuration //配置类
public class CommonConfig {
//声明第三方bean
@Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean
//通过@Bean注解的name/value属性指定bean名称, 如果未指定, 默认是方法名
public SAXReader reader(DeptService deptService){
System.out.println(deptService);
return new SAXReader();
}
}