创建新项目
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;@Autowiredvoid setCar(Car car) {this.car = car;System.out.println("User 自动注入");}public User(){System.out.println("User 构造器");}@PostConstructpublic void postConstruct(){System.out.println(" @PostConstruct");}@PreDestroypublic void preDestroy(){System.out.println("@PreDestroy");}public void initUser(){System.out.println("User@Bean初始化");}public void destroyUser(){System.out.println("User@Bean销毁");}@Overridepublic void destroy() throws Exception {System.out.println("Initializing Bean == destroy");}@Overridepublic 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();}
}