创建新项目
maven的聚合
1. 标记父类项目
标签<packaging>pom</packaging>
表示将该项目标记为父类项目,必须添加。
以下是标签<packing>
的常见取值
groupId在pom.xml中,可以从pom.xml直接修改。
2. 通过<modules>
添加子项目。
导入第三方类
在类上面标注@Import(类名.class)可以导入第三方类,需要注意的是Bean是单实例对象,只写一次就导入进入了,多写并不会重复导入。
注册组件的各种注释
@Scope
@Conditional
例子:我创建了一个WindowsCondition对象,
在某个Bean上面使用@Conditonal注释,表示不是windows系统不能使用
@AutoWired
如果在UserController中不加@AutoWired注释
通过容器获取到的UserController里面的UserService是空的
添加之后不为空
可能会出现的问题
@Qualifier 可以精确指定要使用的组件名
@Resource
和@Autowired都可以自动注入
区别 @Resource具有更强的通用性,但不支持注入为空,@Autowired可以把参数required改为false
@Aware
说人话就是可以调用底层的东西放到代码上。箭头指的是底层的相关参数,可以通过注入放到内部定义的组件中。
@Value
如果想在以下属性类的属性注入的时候,用@Autowired无法注入,就需要用到Value了
以下是取不到的默认值,中间冒号隔开
@PropertySource
引用properties来给参数赋值
需要注意的是以下写法不要随意添加空格(应为cat.age=123),如下图,age就会出现错误,应赋值12
@Profile (多环境)
激活环境,通过坏境选择对应的Bean组件,在applicationproperties中配置相对应的环境。
ClassPathXMLApplicationContext
就是用xml文件配置bean
在resources下创建ioc.xml,配置如下
最后两行一个是bean扫描,把文件下的bean扫描进去,一个是引入外部文件。需要注意的是,默认情况下application.properties是不被引用的。
生命周期
initMethod destroyMethod
User部分的代码
UserConfig的代码
InitializingBean, DisposableBean
这是两个接口
经过执行后发现
@PostConstruct,@PreDestroy
源代码
User.java
package com.atguigu.sping01ioc.bean;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import lombok.Data;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
@Data
public class User implements InitializingBean, DisposableBean {
private String username;
private String password;
private Car car;
@Autowired
void setCar(Car car) {
this.car = car;
System.out.println("User 自动注入");
}
public User(){
System.out.println("User 构造器");
}
@PostConstruct
public void postConstruct(){
System.out.println(" @PostConstruct");
}
@PreDestroy
public void preDestroy(){
System.out.println("@PreDestroy");
}
public void initUser(){
System.out.println("User@Bean初始化");
}
public void destroyUser(){
System.out.println("User@Bean销毁");
}
@Override
public void destroy() throws Exception {
System.out.println("Initializing Bean == destroy");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Initializing Bean == afterPropertiesSet");
}
}
UserConfig.java
package com.atguigu.sping01ioc.config;
import com.atguigu.sping01ioc.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UserConfig {
@Bean(initMethod = "initUser",destroyMethod = "destroyUser")
public User user(){
return new User();
}
}