JavaEE进阶第三课:Spring更简单的对象存储和取出(上)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
上篇文章介绍了Spring的创建和使用讲解3了Bean对象的基本存储和取出这篇文章我们将会介绍Spring更简单的对象存储
目录
1.Bean的存储
原先Bean的存储是先通过在xml的配置文件内增加bean标签Spring再根据标签内容进行存储。
这种方法有个缺点就是如果我们要存储多个对象效率就会很低因为你要注册多个bean标签。如何更简单的注册多个对象呢我们可以采用添加注解的方式来解决。
1.0准备工作
想要用到注解我们必须先配置一下xml文件再原来的基础上添加两行代码这里和之前的合并了大家直接使用即可。
<?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:content="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 https://www.springframework.org/schema/context/spring-context.xsd">
<content:component-scan base-package="com.bit.service"></content:component-scan>
</beans>
这里唯一需要修改的点就是
注意base-package的内容这里填写的就是你想注册到Spring对象所在的包名。你填com.bit.service存储对象是就会存储service中所有类对应的对象当然如果sevice底下还有包里面的内容也会被存储。
如果你想存储java文件文件目录蓝色的那个java下所有的类对应的对象就填**不过**效率太低不推荐。
1.1五大类注解
五大类注解
@Controller控制器存储
@Service服务存储
@Repository仓库存储
@Component组件存储
@Configuration配置存储
这五个注解的使用方式都一样最大区别就是它们的含义这里先说使用一注解@Controller为例
首先我们创建两个类一个类App负责执行main方法另一个ControllerUser用于存入Spring
@Controller
public class ControllerUser {
public void fun(){
System.out.println("我是ControllerUser的fun方法");
}
}
那么main函数里面的代码和之前取对象的代码一样先获取Spring上下文对象再调用它的getBean方法。不过有一个我们getBean的参数怎么填因为我们这里是没有id的看了上一篇文章了同学就会想到可以通过类对象的方法来解决
ControllerUser controllerUser =context.getBean(ControllerUser.class);
这样是可以获取到我们的对象的如果想通过传入字符串的方式获取当然也有方法。可以根据Spring的内置的约定来获取。约定源码
阅读完源码可以得到约定
Spring约定不同的类名定义风格对应不同的参数
1.ClassName 首字母小写
2.className 首字母小写
3.CName 使用原类名
总结 除了类名是首字母和第二个字母均大写的情况使用原类名其余全部为小写类名首字母即可。
————————————————————————
如果想查看源码的话可采用以下操作
1.
该类名翻译过来就是注解对象名称生成器
2.找到generateBeanName方法进入buildDefaultBeanName方法再进入decapitalize方法即可。
1.1.2为什么要有这么多注解
既然使用方式都一样相信大家都有一个疑问为什么还要有五个注解呢这不是多次四举吗。
那么为什么要有这么多我们得对着项目来考虑。对于一个项目分为很多部分有用户输入信息部分有根据输入信息执行不同动作的部分有专门访问数据库的部分等等这么多注解就是为了帮助我们进行分类如果所有的类都使用一种注解就降低了代码的易读性。
那么这些注解都有哪些含义呢
@Controller表示的是业务逻辑层
@Servie服务层
@Repository持久层
@Configuration配置层
• 业务逻辑层主要针对用户输入等等
• 服务层是根据不同的输入调用不同的访问数据库的方法等等它不直接访问数据库
• 持久层有点抽象持久化存储就是数据库它主要负责访问不同的数据库
• 配置层 程序的各种配置
用图来表示
这里没有提到@Component组件存储却又处处存在@Component因为这四个注解都是@Component的子类翻阅源码就可以看到了。
1.2方法注解
1.1.1方法注解需要搭配类注解一起使用
@Bean
这个注解是将修饰方法的返回值对象注册到Spring中
我们创建三个类
User被存储BeanUser包含一个返回User对象的方法App执行main函数。
public class User {
public int id;
public User(int id) {
this.id = id;
}
public void fun(){
System.out.println("我是User的fun方法");
}
}
public class BeanUser {
@Bean
public User getUser(){
return new User(99);
}
}
public class App {
public static void main(String[] args) {
ApplicationContext context=
new ClassPathXmlApplicationContext("spring-config.xml");
User user=(User) context.getBean("");
System.out.println(user.id);
}
这里依然是不知道getBean的参数这里的话就不买关子这里的默认参数是被注解的方法名这里就是getUser。我们执行一下
结果报错了这是这么回事呢查看自己的参数没问题啊说明取是没问题的那么肯定就是存出了问题。
使用方法注解需要搭配类注解一起使用也就是BeanUser需要添加类注解这是为什么呢
因为方法注解是在类里面的Spring扫描我们的包时先考虑有类注解的类再在它的基础上看有没有方法注解的方法这样是为了提高效率不然一个类那么多方法要扫描到什么时候。
那么我们来加上类注解
结果正确
1.2.2方法重载怎么办
我们知道给方法添加注解很大的问题就是方法重名怎么办我们的getBean参数又怎么填呢那么可以通过重命名的方式来处理
名称可以有多个但是一旦使用重命名之前的方法名获取就会失效。
缩写@Bean({"n1","n2"})
小结
这篇文章主要介绍更简单的Bean对象的存储下一篇会介绍更简单的对象取出喜欢的话还请多多关注点赞