<!-- 将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(组件):归属于公共工具类,提供某些公共方法。
