創建新項目
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();}
}