这节课首先我们学习下注解,使用注解在代码中对bean进行定义
首先来到官网https://docs.spring.io/spring/docs/5.0.3.RELEASE/spring-framework-reference/core.html#beans-annotation-config
https://docs.spring.io/spring/docs/5.0.4.RELEASE/spring-framework-reference/core.html#beans-java
接下来演示下代码
首先创建一个MyConfig文件
目录如下
![](https://img.haomeiwen.com/i2509361/2b433f11671e35ab.png)
代码如下
![](https://img.haomeiwen.com/i2509361/04bd2e5d31521965.png)
根据官网可知 在MySpring中调用如下
![](https://img.haomeiwen.com/i2509361/12ea9f9692a20984.png)
运行结果
![](https://img.haomeiwen.com/i2509361/2b175bcf77b4fd2b.png)
下面将setUserNameLength参数改为6
代码如下
![](https://img.haomeiwen.com/i2509361/25ecf8c445cba0bb.png)
运行结果
![](https://img.haomeiwen.com/i2509361/6adaa22b9bb88818.png)
上面代码即为注解方式加载bean对象
下面我们学习一些其他知识点。
![](https://img.haomeiwen.com/i2509361/878e99cb97a6a5e3.png)
以后我们会了解到什么时候使用xml方式好还是注解方式好
假设有这样的需求 数据库中有许多字符串连接字符串包括用户名密码等等 我们把这些写在myuser.xml文件中也是可以的 这里面有大量的常量字符串 这种明显写在xml中更方便
接下来我们对自定义注解进行编码
首先在com.jtthink下面创建一个MyAnnos包(注解)
接下来在SpringBean下面创建一个测试文件MyTest.java文件
目录如下
![](https://img.haomeiwen.com/i2509361/1449b02ec7418764.png)
代码如下
![](https://img.haomeiwen.com/i2509361/6ce5ca16c8c33b9c.png)
接下来创建一个注解
在MyAnnos中创建一个NameCheck注解文件
![](https://img.haomeiwen.com/i2509361/7849ee4e2ca11f05.png)
接下来在MyTest文件中打上注解
![](https://img.haomeiwen.com/i2509361/56e1ac587748d85f.png)
有了注解之后,我们的代码是否能通过注解产生一些变化呢?
在注解里面是不能写任何代码的 会报错
接下来在MySpring中写入测试代码
![](https://img.haomeiwen.com/i2509361/f5c9e5ce73489cdc.png)
运行结果
![](https://img.haomeiwen.com/i2509361/f8d6936c2a9d9b1e.png)
可以看见输出了bhc 注解没有产生任何作用
所以接下来我们需要了解反射这个功能
![](https://img.haomeiwen.com/i2509361/cf6fd3d466f955c1.png)
反射:在程序运行的过程中,去加载某一个类或对象,也叫作动态加载
![](https://img.haomeiwen.com/i2509361/0ba969be67ee0082.png)
接下来我们写下代码
![](https://img.haomeiwen.com/i2509361/4da134f6d03e0d09.png)
运行结果
![](https://img.haomeiwen.com/i2509361/da45f8bf6d334b18.png)
以上代码为通过反射方式获取MyTest类中的方法
下面通过反射的方式获取注解
![](https://img.haomeiwen.com/i2509361/9d888d128a4732df.png)
运行结果
![](https://img.haomeiwen.com/i2509361/755165c34f15bfa0.png)
结果为空 说明并没有获取到注解
是因为注解代码中需要写入一些修饰内容
接下来学习下注解的生命周期
![](https://img.haomeiwen.com/i2509361/1b97c87bb6a67c98.png)
![](https://img.haomeiwen.com/i2509361/762d25d6fc77e1a3.png)
接下来修改一下NameCheck中的注解
![](https://img.haomeiwen.com/i2509361/cd8546bf4be50dc8.png)
把MySpring中取出注解的地方做下修改
![](https://img.haomeiwen.com/i2509361/ccc23ab26a228a55.png)
因为我们的注解打在了showName方法上 所以需要通过方法取出注解 不能通过类取出
运行结果
![](https://img.haomeiwen.com/i2509361/39250976fa725710.png)
可以看见取出了注解内容
接着修改下MyTest中打入注解内容
![](https://img.haomeiwen.com/i2509361/4f56e9268a3cc9e8.png)
运行结果
![](https://img.haomeiwen.com/i2509361/460d3f552aa873ce.png)
可以看见注解发生了变化
那么这样写注解有什么作用呢
得到注解后可以做一个判断
看如下代码
![](https://img.haomeiwen.com/i2509361/12501d4eac8a506d.png)
运行结果
![](https://img.haomeiwen.com/i2509361/1645f69114d2f045.png)
所以在spring内容有庞大的程序对我们的注解进行控制,其也是使用反射的方式
下面我们接着修改一下MySpring代码
![](https://img.haomeiwen.com/i2509361/4cd1c93ac858982b.png)
运行结果
![](https://img.haomeiwen.com/i2509361/d6fb6685599f34da.png)
我们将name值做下修改
![](https://img.haomeiwen.com/i2509361/907b6335e4a46cab.png)
运行结果
![](https://img.haomeiwen.com/i2509361/1ddbb3415dd001ce.png)
![](https://img.haomeiwen.com/i2509361/5f9f868dc2a4b2c2.png)
执行了上面的invoke方法 输出了showName值
网友评论