发表于: 2017-09-08 23:20:01
3 769
今天完成的任务:
1. 今天准备结束spring的任务,做了好多天了,感觉不能再停在这一步了,今天主要分析spring其中的配置文件。
主要对bean进行生产,依赖注入,实例分发。applicationContext文件是Spring默认的配置文件。
Bean的元数据信息:
Bean实现类
Bean的属性信息:数据源的连接,用户名密码等。
Bean的依赖关系。
Bean的行为配置:生命周期等。
Bean的创建方式:通过构造还是创建工厂来实现。
过程:bean配置信息定义bean的实现和依赖关系-----Spring建立bean的注册表----根据注册表加载实例化bean-----放入缓存池-------外部程序调用。
Bean的命名方式示例:
1.<bean class=”…”/> //全限定类的命名。
例子:<bean class=”com.service.HelloWordImpl”/>
调用:public static void sayHelloWordByClass(){
HelloWord helloWord= beanFactory.getBean(HelloWordImpl.class) }
2.<bean id =”bean1” class=”…”></bean> //通过指令id来实现对bean的命名。
例子: <bean id=”helloWord” class=”com.service.HelloWordImpl”/>
调用:public static void sayHelloWordById(){
HelloWord helloWord= beanFactory.getBean(“helloWord”,HelloWord.class)}
3.<bean name =”bean2” class=”…”></bean> //name字符没有限制,可以使用特殊字符
例子:<bean id=”helloWord” class=”com.service.HelloWordImpl”/>
调用:public static void sayHelloWordByName(){
HelloWord helloWord= beanFactory.getBean(“helloWord”,HelloWord.class)}
4.<bean name=”bean3” class=”…”/>
<alias alias=”alias1” name=”bean3”/>
例子:<bean name=”helloWord” class=”com.service.HelloWordImpl”/>
<alias alias=”alias1” name=”helloWord”/>
调用:public static void sayHelloWordByAlias(){
HelloWord helloWord = beanFactory.getBean(“alias”,HelloWord.class)}//对bean2起一个别名,叫做bean3
Bean的作用域,即scope的定义
Singleton <bean id=”helloword” class=”com.service.HellpWorldImpl” scope=”singleton”></bean>
是bean只管理一个共享的实例,每次都会引用返回给调用者,并且spring将会对bean进行后续的生命管理。
prototype <bean id=”helloword” class=”com.service.HellpWorldImpl” scope=”peototype”></bean>
是在每次对bean请求时都会创建一个实例,不需要收到其他对象影响。但是这样可能会不太安全。并且spring不会后续管理新建的实例。
在Spring中整合配置文件
在大型的Spring项目中如果有多个配置文件,就需要加载多个配置文件,比如:
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"classpath:spring.xml","spring-mybatis.xml",”mybatis.xml”});
但是这样不方便管理以及查看。所以在Spring中可以专门使用一个配置文件来存这些xml文件。比如:
在spring-ALL.xml中
<beans>
<import resource =” spring.xml”>
<import resource =” spring-mybatis.xml”>
<import resource =” mybatis.xml”>
</beans>
调用:ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"spring-ALL.xml"});
使用bean注入的小例子。
1.新建一个项目目录如图
2. 创建HelloWord接口(interface文件)
3. 创建HelloWordImpl实例
4注入bean的配置文件conf.xml
5.Main方法
6.运行。
7.工作流程:在main函数中加载配置文件,启动springIOC;获取helloword实例;输出信息。具体是:使用ClassPathXmlApplicationContext来加载配置文件,使用beanfactory来获取实例,最后输出。
2.完成了spring和mybatis的配置!!!
代码太多了,不准备贴,然后参考网上的一个例子,写的还是比较详细,但是其中我不知道为什么缺少一个userService的注入bean。所以需要添加在spring-mybatis.xml中:
</bean>
<bean id="userService" class="UserService的地址">
</bean>
http://www.cnblogs.com/xdp-gacl/p/4271627.html
然后说一下自己的理解和感受,这两天一直在配置spring和mybatis的整合,中间碰到了很多问题,大多数都是Failed to load ApplicationContext
原因可能是:
1缺少需要的依赖
2找不到.Xml文件(有的是因为路径写的有问题。)
3找不到接口(有的是因为没有在配置文件中将其实例化)
所以解决办法是:
1.查看import是否有报错,然后添加依赖。
2.查看文件的路径是否都正确。尤其是mapper的命名空间
3.查看配置文件中是否有缺少bean实例化。
4.学会看报错的内容还是很重要的,虽然看起来很多但是确实可以找到大概的位置。
放一张运行成功的图。。。哎嘿嘿。
明天计划:
1.明天计划将spring这一块做个总结,然后对配置文件继续学习,争取可以清楚的讲出来。
2.对于Spring+mybatis找了很多例子,但是只实现了一个,明天试试能不能把其他的也跑通。
3.对于java和数据库基础的学习。
遇到问题:
问题都出在配置和运行里面,然后百度+师兄帮忙终于解决了。
收获:
配置好了Spring和mybatis
学习了配置文件的内容,主要是bean。如何命名bean,如何实例化。
评论