Spring中Bean对象获取(注解)

<!-- 将Bean对象注册到容器 class值为需要注册的类-->
<bean id="user" class="User"></bean>

当类足够多时,不可能将类一个一个配置到spring配置文件中去。

一、Spring中更简单的读取和存储对象(注解实现):

1.前置工作: 配置扫描路径(重要)
​
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="Index of /schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:content="Index of /schema/context"
xsi:schemaLocation="Index of /schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd Index of /schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<content:component-scan base-package="类所在包名"></content:component-scan>
</beans>
​

要将对象存储在 Spring 中,有两种注解类型可以实现:

1. 五大类注解:

@Controller(控制器)
//通过注解将Bean对象注入spring中,并且自动将Bean类Id命名为user(类名首字母小写)
@Controller
public class User {
public String print(String name){
return name + ":hello";
}
}

@Controller注解将Bean对象注入spring中,并且自动将Bean类的name命名为user(类名首字母小写)

 

public static void main(String[] args) {
//1.得到spring上下文
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
//2.在User类中通过注解添加Bean对象

/*3.得到Bean对象
参数一为对象的name,参数二为对象的类*/
User user = context.getBean("user",User.class);
System.out.println(user.print("注解注入Bean"));
}

输出结果::

@Service(服务)
@Repository(仓库)
@Component(组件)
@Configuration(配置)
以上注解使用同@Controller注解相似。
@Component
public class ComponentUser {
public String print(String name){
return name+" : 注解注入";
}
}

//通过Component注解Bean注入与获取
public static void main(String[] args) {
//获取spring上下文
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");

//得到Bean对象
ComponentUser componentUser = context.getBean("componentUser",ComponentUser.class);
System.out.println(componentUser.print("Component"));
}

 

 

2. 方法注解:@Bean

类注解是添加到某个类上的,而方法注解是放到某个方法上的
使用@Bean方法注解:将返回的对象存储到Spring 中。
注意事项:@Bean注解一定要配合5大类注解一块使用,否则是无效的方法注解。

 

(1)@Bean默认情况下,Bean name = 方法名

 

(2) 当给@Bean设置了name属性之后,使用原方法名就不能获取到对象了,只能使用设置的名称才能获取。

 

 

二、五大类注解关系

@Component是Controller、@Service、@Repository、@Configuration的父类

三、问题解析

问题1:如果类名首字母是小写,要怎么从Spring中获取 Bean? 【这种的没问题】
答:和首字母是大写是一直的,都是将类名首字母转为小写的方式来获取对象

 

问题2:如果类的首字母和第二字母都是大写,会怎样?
答: 当使用默认规则,首字母小写获取 Bean对象时,失败了!
正确获取Bean的方式是使用原类名,就能成功获取到了。
结论:
(1)当使用5大类注解时,默认情况下获取Bean对象,只需要将类名首字母小写即可;
(2)当 Bean对象首字母和第二个字母都是大写时,此时需要使用原类名才能正确的获取到Bean对象。
spring中Bean对象name命名
spring中Bean对象名称(id)命名调用的是JDK中的源码

 

问题3:项目中没有目录,所有的类都写在 java根路径下,怎么存、取 Bean对象?
<content:component-scan base-package="**"></content:component-scan>
采用这种写法(**)是直接扫描根路径下的所有文件以及子目录下的文件,由于ApplicationContext是将类全部加载,需要时再取出Bean对象,如果扫描全部文件,刚开始执行会很慢, 最佳方案:给项目创建合适目录。

 

问题四.为什么需要五个类注解?
(a)通过类注解可以了解当前类的用途(比如看到电脑logo就清楚是哪个品牌的电脑)。
(b)功能有细微不同:这个在Spring MVC/Spring Boot有些许不同。

 

五大类注解用途(重点)∶
1.@Controller (控制器)﹔归属于业务逻辑层,用来控制用户的行为,它用来检查用户参数的有效性。
2.@Service(服务):归属于服务层,调用持久化类实现相应的功能。不直接和数据库交互的,它类似于控制中心。
3.@Repository(仓库)﹔归属于持久层,是直接和数据库进行交互的。通常每一个表都会对应一个@Repository。
4.@Configuration(配置):归属于配置层,是用来配置当前项目的一些信息。
5.Component(组件):归属于公共工具类,提供某些公共方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值