目录
第六种加载bean方式-实现ImportSelector接口
第七种加载bean方式-实现ImportBeanDefinitionRegistrar
第八种bean的加载方式-实现BeanDefinitionRegistryPostProcessor
第一种bean的加载方式-配置文件
先创建一个使用maven的spring工程
导入spring核心配置
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.9</version>
</dependency>
创建一个类
public class Cat {
}
public class Dog {
}
创建一个名为applicationContext.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="cat" class="com.service.Cat"/>
<bean id="dog" class="com.service.Dog"/>
</beans>
创建一个启动类
package com.app;
import com.service.Dog;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App1 {
public static void main(String[] args) {
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
Object cat = app.getBean("cat");//根据id获取
System.out.println(cat);
Object dog = app.getBean(Dog.class);//根据类获取,当不唯一时会报错
System.out.println(dog);
}
}
运行结果,这样就可以得到bean的对象了
或者使用可以使用一次性获取所有bean
public class App1 {
public static void main(String[] args) {
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
String[] names = app.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
}
运行结果
第二种加载bean方式-注解和扫描
使用注解,注解的作用就是替代配置文件的配置,注解有@Component @Service @Repository等
替换配置文件中的<bean id= class=..>
@Component("cat") //起的名
public class Cat {
}
@Component
public class Dog {
}
使用完注解还得让spring去扫描到这个注解,在配置文件中的写
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<!--告诉spring扫描哪个包component导入context命名空间-->
<context:component-scan base-package="com"/>
</beans>
运行结果
创建第三方的bean对象
先导入对应的坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.24</version>
</dependency>
创建一个类,返回你需要导入的对象即可,加入注解
package com.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.spri