当前位置: 首页 > news >正文

Spring中存储Bean的相关注解及用法

 把在Spring的IOC容器中存放的对象,叫做bean.本文着重介绍bean的存储相关的注解及其用法.

1. 三种获取bean的方法

这里只介绍三种获取bean的方法:

Object getBean(String var1)
Object getBean(Class<T> var1)
Object getBean(String var1,Class<T> var2)

分别是根据bean的名称获取,根据bean的类型获取,根据bean的名称和类型获取.我们获取到的bean对象都是同一个,属于单例.

bean的命名:

bean名称以小写字母开头,然后使用驼峰式大小写.

比如: UserController这个类的bean的名称是userController. 

也有特殊情况:当有多个字符并且第一个和第⼆个字符都是大写时,将保留原始的大小写.

比如: UController这个类的bean名称是UController.

2. 类注解

2.1 @Controller(控制器存储)

@Controller
public class UserController {public void sayHi() {System.out.println("hi,controller");}
}

获取到UserController对象,调用sayHi方法:

public static void main(String[] args) {ApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);UserController userController = context.getBean(UserController.class);userController.sayHi();}

这就是通过类名的方式来获取bean.

2.2 @Service(服务存储)

@Service
public class UserService {public void sayHi() {System.out.println("hi,service");}
}
public static void main(String[] args) {ApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);UserService userService = context.getBean(UserService.class);userService.sayHi();}

2.3 @Repository(仓库存储)

@Repository
public class UserRepository {public void sayHi() {System.out.println("hi,repository");}
}
public static void main(String[] args) {ApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);UserRepository userRepository = context.getBean(UserRepository.class);userRepository .sayHi();}

2.4 @Component(组件存储)

@Component
public class UserComponent {public void sayHi() {System.out.println("hi,component");}
}
public static void main(String[] args) {ApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);UserComponent userComponent = context.getBean(UserComponent.class);userComponent.sayHi();}

2.5 @Configuration(配置存储)

@Configuration
public class UserConfiguration {public void sayHi() {System.out.println("hi,configuration");}
}
public static void main(String[] args) {ApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);UserConfiguration userConfiguration = context.getBean(UserConfiguration.class);userConfiguration.sayHi();}

3. 方法注解@Bean

只使用类注解,有些问题就无法解决:外部包里面的类无法添加类注解,一个类可能有多个数据源需要多个对象.这时,我们仅仅使用类注解无法解决问题,就引入了方法注解@Bean.

使用@Bean注解时,需要搭配上述的类注解一同使用.

3.1 获取单个bean

@Component
public class BeanConfig {@Beanpublic User user(){User user = new User();user.setName("zhangsan");user.setAge(22);return user;}
}@Data
public class User {public String name;public int age;
}
public static void main(String[] args) {ApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);User user = context.getBean(User.class);System.out.println(user);}

3.2 获取多个bean

这时必须使用名称来获取bean:

@Component
public class BeanConfig {@Beanpublic User user1(){User user = new User();user.setName("zhangsan");user.setAge(22);return user;}@Beanpublic User user2(){User user = new User();user.setName("lisi");user.setAge(19);return user;}
}
public static void main(String[] args) {ApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);User user1 = (User)context.getBean("user1");User user2 = (User)context.getBean("user2");System.out.println(user1);System.out.println(user2);}

3.3 bean的重命名

@Component
public class BeanConfig {@Bean(name = {"u1","u2"})public User user1(){User user = new User();user.setName("zhangsan");user.setAge(22);return user;}
}

"name="这部分可以省略,如果只有一个重新命名的名字,{}也可以省略.

public static void main(String[] args) {ApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);User user1 = (User)context.getBean("u1");System.out.println(user1);}

3.4 扫描路径

我们之前加上了@Bean注解不一定会生效,如果想要生效,需要Spring扫描到.而Spring扫描的默认路径是Application这个类所在的包中.我如果将它放入controller包中,Spring就扫描不到component这个包下面的bean了.我们可以通过@ComponentScan来指定扫描路径.

@ComponentScan("{com.lzq.demo}")
@SpringBootApplication
public class SpringIocApplication {public static void main(String[] args) {ApplicationContext context = SpringApplication.run(SpringIocApplication.class, args);User user1 = (User)context.getBean("u1");System.out.println(user1);}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++】类和对象之继承
  • 数组算法--二分查找
  • php 做一个mqtt按钮,发布触发信号
  • Unity UGUI 之 Input Field
  • 深入浅出WebRTC—Pacer
  • elementPuls 表格反选实现
  • 【LLM】-07-提示工程-聊天机器人
  • HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 答案纯享版
  • Git添加和提交文件
  • [亲测可用]俄罗斯方块H5-网页小游戏源码-HTML源码
  • 优选算法之二分查找(上)
  • 【Matlab 传感器布局优化】基于群智能算法的wsn覆盖优化研究
  • 飞书群聊机器人自定义机器人接入,并实现艾特@群成员功能
  • 机器学习 | 回归算法原理——多项式回归
  • 网络学习|如何理解服务的端口号
  • [case10]使用RSQL实现端到端的动态查询
  • Bytom交易说明(账户管理模式)
  • ES6--对象的扩展
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript实现分页效果
  • Kibana配置logstash,报表一体化
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • ViewService——一种保证客户端与服务端同步的方法
  • vue-router的history模式发布配置
  • Web标准制定过程
  • windows下如何用phpstorm同步测试服务器
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 首页查询功能的一次实现过程
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 运行时添加log4j2的appender
  • #Z2294. 打印树的直径
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (160)时序收敛--->(10)时序收敛十
  • (solr系列:一)使用tomcat部署solr服务
  • (二) 初入MySQL 【数据库管理】
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (四)Linux Shell编程——输入输出重定向
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (一)Linux+Windows下安装ffmpeg
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)3D模板阴影原理
  • (转)EXC_BREAKPOINT僵尸错误
  • (转载)Linux网络编程入门
  • (转载)深入super,看Python如何解决钻石继承难题
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .Net - 类的介绍
  • .NET的微型Web框架 Nancy
  • .Net小白的大学四年,内含面经
  • .NET中使用Redis (二)
  • /etc/fstab 只读无法修改的解决办法
  • :class的用法及应用