Spring框架中基于注解的Bean管理和属性注入详解
创作时间:
作者:
@小白创作中心
Spring框架中基于注解的Bean管理和属性注入详解
引用
CSDN
1.
https://blog.csdn.net/m0_74977981/article/details/144626708
引入
什么是注解
- 注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值...)
- 使用注解,注解作用在类上面,方法上面,属性上边
- 使用注解的目的:简化XML配置
Spring针对Bean管理中创建对象提供的注解
- @Component:普通的类
- @Controller:表现层
- @Service:业务层
- @Repository:持久层
上边四个功能一样,都可以用来创建bean实例
用注解的方式创建对象
①:编写接口和实现类
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();
}
}
用注解的方实现属性注入
- @Value:用于注入普通类型(String,int,double等类型)--比较麻烦,某些情况下不如直接赋值。
- @Autowired:默认按类型进行自动装配(引用类型)---掌握这个
- @Qualifier:不能单独使用必须和@Autowired一起使用,强制使用名称注入---不如直接使用Autowired
- @Resource:Java提供的注解,也被支持。使用name属性,按名称注入
具体的代码如下:
// 默认当前类名就是ID名称,首字母小写
@Component(value = "c")
// @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名称没有关系
@Autowired //一定要学会(用于注入对象)
// 按id的名称注入,Qualifier不能单独使用,需要Autowired一起使用。
// @Qualifier(value = "person")
// @Resource Java提供的注解,按名称注入对象,属性名称是name
// @Resource(name = "person")
private Person person;
@Override
public String toString() {
return "Car{" +
"cname='" + cname + '\'' +
", money=" + money +
", person=" + person +
'}';
}
}
@Controller
//@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("c");
System.out.println(car);
}
纯注解的形式实现IOC
纯注解的方式是微服务架构开发的主要方式,所以也是非常的重要。纯注解的目的是替换掉所有的配置文件。但是需要编写配置类。
常用的注解总结
- @Configuration:声明是配置类
- @ComponentScan:扫描具体包结构的
编写实体类
@Component
public class Order {
@Value("北京")
private String address;
@Override
public String toString() {
return "Order{" +
"address='" + address + '\'' +
'}';
}
}
编写配置类,替换掉applicationContext.xml配置文件
@Configuration
// 扫描指定的包结构
@ComponentScan(value = "com.qcby")
public class SpringConfig {
}
测试方法的编写
package com.qcby.test;
import com.qcby.demo4.Order;
import com.qcby.demo4.SpringConfig;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Demo4 {
@Test
public void run(){
// 创建工厂,加载配置类
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
// 获取到对象
Order order = (Order) ac.getBean("order");
System.out.println(order);
}
}
热门推荐
Eclipse获取源码的多种方法详解
什么蛋最有营养可以经常吃
2025央视315晚会曝光名单汇总:翻新卫生巾、手机抽奖新套路、家电维修乱收费等
小区没电了打什么电话
米小圈脑筋急转弯5000题,米小圈脑筋急转弯5000题攻略
红楼梦各个主要人物性格分析
西藏林芝察隅县:森林防火宣传全面启动
定制衣柜全攻略:从材料到空间,这些细节不容忽视!
新能源车应购买哪些保险?
舆情下的杨铭宇黄焖鸡:大本营门店经营遇冷 部门监管与企业自查
关于死亡,这篇文章值得我们深思,最后的时刻你会如何选择?
楚辞取名艺术,传承文化之美
调查显示:80%人的早餐都吃错了!营养专家推荐“万能早餐公式”!
如何在运动中养护膝关节
怎么让 AI 写出你想要的代码?.cursorrules 一招制胜
《大明王朝 1566》原本置身事外杨金水为什么要入毁堤淹田的局?
儿童急性中耳炎症状及病因详解
啤酒热量高还是白酒热量高?啤酒热量低为什么也会发胖?
左手五指发麻警惕什么原因
九里香的种植指南:从选址到养护的全方位解析
我国地方猪种主要有哪些?种质特性如何?
树立安全意识,拒绝“三无”产品
修车工提醒:定期检查汽车的这几个部位,驾驶可以更加安全
SELF-REFINE:带自我反馈的迭代改进方法
为什么全世界的黑帮都无法控制高科技产业?
怎么提高雅思阅读词汇量
【悦读】唐·李绅《悯农》二首赏析及同步练习
套期保值策略:金融市场中的风险对冲利器
数据驱动决策的实践案例
木棉花的寓意与象征意义(探索木棉花在文化中的角色与象征)