在实际开发中,我们往往要用到Spring容器为我们提供的诸多资源,例如想要获取到容器中的配置、获取到容器中的Bean等等。本文为大家详细讲讲工具类如何获取到Spring容器中的Bean,需要的可以参考一下
什么是Bean管理
bean管理指的是如下的两个操作。
1.创建对象
2.注入属性
Bean管理操作的两种方式
1.基于xml配置文件的方式实现
2.基于注解方式实现
基于注解的方式实现Bean管理和注入属性(常用)
1.什么是注解
①:注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值…)
②:使用注解,注解作用在类上面,方法上面,属性上边
③:使用注解的目的:简化XML配置
2.Spring针对Bean管理中创建对象提供的注解
@Component 普通的类
@Controller 表现层
@Service 业务层
@Repository 持久层
上边四个功能一样,都可以用来创建bean实例
3.用注解的方式创建对象
①:编写接口和实现类
package com.qcby.testanno;
public interface UserService {
public void hello();
}
②:在需要管理的类上添加@Component注解
package com.qcby.testanno;
import org.springframework.stereotype.Component;
/* <bean id="us" class="UserServiceImpl"/> */
/**
* 组件,作用:把当前类使用IOC容器进行管理,如果没有指定名称,默认使用类名,首字母是小写。
* userServiceImpl。或者自己指定名称
**/
@Controller(value="us")
public class UserServiceImpl implements UserService {
public void hello() {
System.out.println("使用注解,方便吧!");
}
}
③:编写配置文件,重点是开启注解扫描。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" 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">
<!--开启注解扫描 com.qcby所有的包中的所有的类-->
<context:component-scan base-package="com.qcby"/>
</beans>
④:测试
package com.qcby.test;
import com.qcby.testanno.UserService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo2 {
@Test
public void run1(){
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContextanno.xml");
UserService us = (UserService) ac.getBean("us");
us.hello();
}
}
4.用注解的方实现属性注入
@Value 用于注入普通类型(String,int,double等类型)
@Autowired 默认按类型进行自动装配(引用类型)
@Qualifier 不能单独使用必须和@Autowired一起使用,强制使用名称注入
@Resource Java提供的注解,也被支持。使用name属性,按名称注入
具体的代码如下:用注解的方式创建对象和赋值
// 默认当前类名就是ID名称,首字母小写
@Component(value = "car")
// @Controller
// @Service(value = "c")
// @Repository(valu = "c")
public class Car {
// 注解注入值,属性set方法是可以省略不写的。
// 只有一个属性,属性的名称是value,value是可以省略不写的
@Value("大奔2")
private String cname;
@Value(value = "400000")
private Double money;
// 也不用提供set方法
// 按类型自动装配的注解,和id名称没有关系
@Qualifier("person")
@Autowired //注意:(所引用的Car类里面必须要写:类声明@Component(value="person") )
// 注入引用数据类型:不需要写值,根据类型自动匹配
//@Resource(name="person") //是jdk提供,按照名称进行注入,只能在引用数据类型当中发使用
private Person person;
@Override
public String toString() {
return "Car{" +
"cname='" + cname + '\'' +
", money=" + money +
", person=" + person +
'}';
}
}
注意声明:@Component(value = “person”)
@Component(value = "person")
public class Person {
@Value("张三")
private String pname;
@Override
public String toString() {
return "Person{" +
"pname='" + pname + '\'' +
'}';
}
}
测试:用注解的方式创建对象和赋值
@Test
public void run1(){
// 工厂
ApplicationContext ac = new
ClassPathXmlApplicationContext("applicationContext.xml");
// 获取对象
Car car = (Car) ac.getBean("car");
System.out.println(car);
}
到此这篇关于Spring框架对于Bean的管理详解的文章就介绍到这了,更多相关Spring Bean内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Spring框架对于Bean的管理详解
基础教程推荐
- Java实现线程插队的示例代码 2022-09-03
- Java数据结构之对象比较详解 2023-03-07
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- java基础知识之FileInputStream流的使用 2023-08-11
- springboot自定义starter方法及注解实例 2023-03-31
- Java文件管理操作的知识点整理 2023-05-19
- Java实现查找文件和替换文件内容 2023-04-06
- Java并发编程进阶之线程控制篇 2023-03-07
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- java实现多人聊天系统 2023-05-19