1.创建Bean
1.1使用@Configuration与@Bean注解
使用Spring框架创建简单的对象(不使用SpringBoot)
需要使用的注解:
@Configuration 标志这是个配置类,启动项目后,会根据这个注解找到当前类添加到spring容器中管理
@Bean
标识在启动spring时加载@Bean的方法,方法名即bean的id,返回值是spring创建的对象
实现思想:IOC(控制反转)
需求:通过Spring框架获创建简单对象
项目结构
步骤
1.创建POJO类Demo
public class Demo {
@Override
public String toString() {
return "hello world";
}
}
2.创建配置类
@Configuration/*配置文件*/
public class Config {
@Bean/*标识在启动spring时加载@Bean的方法*/
/*方法名即bean的id 返回值是spring创建的对象*/
public Demo bean(){
return new Demo();
}
}
3.配置pom文件,找spring-context的坐标
https://mvnrepository.com/ 此处是下载坐标网址
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.3</version>
</dependency>
4.创建测试类测试
public class Test {
public static void main(String[] args) {
//初始化spring容器
AnnotationConfigApplicationContext c=
new AnnotationConfigApplicationContext(Config.class);
Demo demo=c.getBean("bean", Demo.class);
System.out.println(demo);
}
}
打印出了”hello world“ 说明,Spring确实自动创建了对象
如果要修改BeanID,可以使用@Baen的参数修改
用法:如果根据类型获取对象失败时,可以使用BeanID
.getBean("beanId",DemoBean.class);
1.2.组件扫描功能
使用注解:
@Component 添加到pojo类 例如DemoBean类
@ComponentScan(basePackages=" ") 扫描组件所在的包
使用步骤:
使用@Component声明类 并实现序列化接口
Spring在组件扫描时,会找到@Component标注的类,创建该类的对象,Bean 的id为类名 首字母小写
@Component
public class DemoBean implements Serializable {
@Override
public String toString() {
return "DemoUser";
}
}
配置Cofig文件
@Configuration/*配置文件*/
@ComponentScan(basePackages = "cn.tedu.demo")
public class Config {
@Bean/*标识在启动spring时加载@Bean的方法*/
/*方法名即bean的id 返回值是spring创建的对象*/
public Demo bean(){
return new Demo();
}
}
测试组件扫描
@Test/*测试组件扫描*/
public void demoBean(){
DemoBean demoBean= a.getBean("demoBean",DemoBean.class);
System.out.println(demoBean);
}
总结spring两种创建简单对象方式
1.使用@Configuration、@Bean 方法名为id 也可以自己设置
2.使用@Component 、@ComponentScan(basePackages = "cn.tedu.demo") id为类名首字母小写
2.使用Bean的方式
2.1 Autowired注入
将注解@Autowired或者@Resource添加到成员变量上,即表示这个成员变量会由Spring容器注入对应的Bean对象
@Autowired
private ConfigDemoBean configDemoBean;
2.2 Setter方法
和前面其实也差不多,只不过注解放在了setter方法上
@Autowired
private void setFacDemoBean(FacDemoBean facDemoBean) {
this.facDemoBean = facDemoBean;
}
2.3 构造方法
在构造方法中传入Bean对象来初始化
public class DemoController {
private DemoBean DemoBean;
public DemoController(DemoBean demoBean) {
this.DemoBean = demoBean;
}
}
根据Bean类型匹配
小明使用Pen{name='钢笔'}写字
根据Bean的id匹配
小明使用Pen{name='钢笔'}写字
Bean的类型与id偶不匹配
解决方法:
使用注解@Qualifier("myPen")指定Bean的id
小明使用Pen{name='钢笔'}写字
3.getBeanNamesForType()
作用:根据类名获取全部BeanID(Bean的name)
@Test
public void test1(){
// getBeanNamesForType 根据类名获取全部BeanID(Bean的name)
String[] names=a.getBeanNamesForType(DemoBean.class);
for(String ids:names){
System.out.println(ids);
}
}
以上基于SpringBoot项目
如果是Maven项目
创建Bean对象有两种方式: