spring注解
把properties文件中的key注入到属性当中去
xml配置文件拆分 -> import标签
注解开发中 @import 实现
搞一个主配置类,其他配置类全部导入进来这个这个主配置类 而且其他配置类不需要
加上@configuration注解 之前这个注解用于表示这是一个配置文件
这里有一个@Bean 执行完createUser方法后,把这个方法的返回值作为bean对象保存到
spring容器当中,启动程序,我们会发现它没有被执行,没有打印 但是下面这个被打印了
原因:DbConfig类没有被作为一个配置类使用 它没有被spring所管理
解决办法:加上一个@Configuration注解在Dbconfig
方法二: 这就是导入的功能 导入一个类的实现
spring整合web
黑色的是jar包 绿色的是模块
java在实际开发, web开发,web项目, web项目发布到web服务器(Tomcat)
如果我们的项目使用spring框架,Spring核心的IOC容器(ApplicationContext)对象创建问题?
手动创建:
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext( "applicationContext.xml" );
每次使用Spring,手动创建Spring容器,而Spring容器中bean一般不会改变,每次使用创建,浪费,效率低,能不能只创建一次,需要使用的时候,获取IoC容器对象
开始整合
创建web项目 maven 等待加载然后
升级web.xml
apply之后
创建两个目录,一个是java 一个是resourse
加依赖
spring-web依赖的作用:
做下面两件事
web.xml文件中配置创建spring容器的监听器
servlet当中是否交给Spring管理呢?
不能,因为Servlet已经交给Tomcat管理,通过http请求的Servlet都是Tomcat容器中的对象
dao service一定是交给Spring管理的
交给Spring管理 用到IOC容器,类对象的创建、销毁都是由Spring管理
servlet是tomcat服务器所创建的,所以他也是保存到Servlet容器当中,是一个单例
Tomcat又称为Servlet容器,
如果servlet交给Spring容器管理,servlet是tomcat服务器所创建的,所以他也是保存到Servlet容器当中,是一个单例
写service dao mapper
dao->
写接口:
写实现类:
service
接口:
实现类:
@(因为它依赖我们的dao,所以需要引入
@Autowired -> 自动注入这个属性
private UserDao userDao )
基于接口进行隔离
实现了注入对象
创建servlet
需要打印日志:引入logo4j.proerties
回车启动:
出错:
原因:项目的servlet有两个 出现了空指针异常
JavaWeb三剑客:servlet filter listern
servlet当中是否交给Spring管理呢?
不能,因为Servlet已经交给Tomcat管理,通过http请求的Servlet都是Tomcat容器中的对象,所以需要手动获取容器,因为我们永远访问的是tomcat的servlet ,里面没有userService
解决办法:手动获取userService
通过容器getBean()
拿到spring容器对象
不用new创建,因为他已经放到域对象里去了,我们去拿就行了
拿到容器
这样子还不够,我要完全解决web层,起码可以通过controller注解可以service层对象注入进来
而不是这种手动创建去拿
简单一点点的写法(工具类获取SpringIOC容器对象)
加入spring-web依赖主要是它能够给我提供监听器,监听tomcat的启动,然后他就会调用ContextLoaderListener里面的代码去创建一个Spring容器,把这个容器保存在我们的这个servletContext域上