数据校验
在前端传入数据的时候spring是不知道数据的格式的,由于模型与表单绑定了,所以只要在模型中指定数据的格式已经类型即可。
JSR303的使用
需要在将pojo作为传参的前面加上@valid注解,另外pojo上面加上检测注解即可
jdbc的实现过程:
1.注册驱动
Drivermanager.register(new com.mysql.jdbc.Driver());
//或者是classforname
2.获取连接
connection con = Drivermanager.getconnection(url:“jdbc:mysql://localost:3306/test”,user:“root”,password:“123”)
3.获取操作数据库的预处理对象
prepareStatement pstm = con.prepareStatement(“select * form table”)
4.执行sql,得到结果集
Result rs = pstm.executeQuery();
5.遍历结果集
while(rs.next){
sout(rs.getString(“name”));
}
6.释放资源
rs.close;
pstm.close
con.close
这里耦合性太大,所以用反射,但是反射的时候里面的字符串写死了,所以最好用配置文件。
自己编写解耦话,其实是用工厂模式,现在配置文件中写好对应的路径,这个路径通过反射生成对应的bean(可重复私使用的类),这就需要使用map集合,通过遍历propertity配置文件中的类容进行获取到所有的bean以key,value的形式保存在map集合中,当程序 中需要使用的时候就根据key的值返回value即可。
然后是IOC的原理,ioc是自己的xml文件管理了所有的bean(这里相当于自己手动编写的工厂模式的那部分类容封装了),然后需要使用的时候需要首先读取到这个xml文件,通过applicationContext的classpathxmlApplocationContext实现类获取到该文件,根据getbean方法获取到bean。
applicationContext是容器一创建所有的bean就创建,适用于单例
而beanfactory是延迟创建,什么时候需要用到什么时候才创建。适用于多例情况下。
好在spring是一个非常强大的框架,能够判断用户的创建用户的需求自动化,实际情况下多数用的是前者applicationContext
创建bean的三种方式
- 通过自带的构造方法,spring中的默认就是通过构造方法来的,这里是无参构造函数才行
- 通过类中的某方法,这里有点像配置类中的方法,上面加了@Bean注解,
- 通过静态方法
依赖注入
需要注意的是,这这里面的三个基本数据的包装类也是依赖注入。
使用构造函数进行依赖注入
由于构造函数时带有参数的,这里找到参数的类型(type index name)都可以找到到底要注入哪一个,name是我们平时用得最多的,然后ref由于有时间日期,所以多增加了一个日期bean,通过ref注入到accountservice得Bean中。
要创建一个没有依赖得bean时,需要提供无参构造器。
set方法注入
基于注解的Spring Bean管理
- componment注解
注意需要加这个
需要注意的是,不是废弃了xml文件,这里还是需要xml文件的。
用于注入数据的注解:
- Autowired
通过类型在springIOC容器中找,看那个类型是可以匹配的。
当有多个可以匹配的时候先圈定匹配的Bean,然后在圈定的bean中按照自己的类名继续查找。
配合使用。
这一部分内容原来是外部jar包的需要添加到IOC容器中的bean,由于外部jar无法通过注解配置,那么如何在xml中省略呢?答案是配置文件
完全省略xml文件,
利用注解版的applicationContext:
现在就算是去掉那个@configration注解也不会报错,原因是这里的参数直接指定了读取这个类里面的配置。
但是如果我们再添加一个config文件的话,这时候就需要加上这个@configration注解,
不然componmentscan就不知道新加的config是配置类,另外的解决办法是在
- annotationConfigApplicationContext的参数里面多加入newConfig.class。
- 使用import将新的config导进来。
property的引入
现在的问题是
这里面的数据写死了,可以提取出来。
实现方式是,
-
jdbc.propertity里面写全局的配置参数。
-
然后在配置文件中使用@value注解
-
最后让工程读取到propertity文件
提示:springboot中自带的application.propertity不需要使用propertysource去索引,springboot默认已经加载。
@ConfigurationProperties:
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
prefix = “xxx”:配置文件中哪个下面的所有属性进行一一映射