bean基础入门
学习内容:
- bean基础配置
- bean别名配置
- bean作用范围配置
区别:springbean与javabean
传统的java应用中,javabean遵循一些规范,规范如下:
1、这个类必须具有一个公共的(public)无参构造函数;
2、所有属性私有化(private);
3、私有化的属性必须通过public类型的方法(getter和setter)暴露给其他程序,并且方法的命名也必须遵循一定的命名规范。
4、这个类应是可序列化的。(比如可以实现Serializable 接口,用于实现bean的持久性)
Spring容器对Bean没有特殊要求,不像javaBean一样遵循一些规范(不过对于通过设置方法注入的Bean,一定要提供setter方法)
用处:
传统javaBean更多地作为值传递参数,
而Spring中的bean用处几乎无处不在,任何组件都可以被称其bean。
项目结构(铺垫)
其中service代码
applicationContext.xml配置:
启动文件:
基础配置
就是之前那个
起别名
配置 applicationContext.xml
添加name属性 可以指点多个别名(, 或者 ; 分隔即可)
bean作用范围配置
一些细节
spring默认为我们造的bean是单例的
为了造 非单例的bean ,需要配置applicationContext.xml
为bean添加 scope属性为prototype
为何要默认单例,若不是单例,用一个造一个,之间爆了
造一个可以重复用的有
-
表现层对象
-
业务层对象
-
数据层对象
-
工具对象
bean实例化
实例化创建bean的三种方式
bean本质上是对象,创建bean使用构造方法完成
bean实例化(构造方法)
项目结构概览:
BookDao.java:
它的实现类 BookDaoImpl.java:
IoC容器的配置文件:
最后,项目的入口文件 AppForInstanceBook.java
为我们的实现类写个构造方法,证明是否有利用构造方法造对象
并且,将构造方法私有化,不让外部调用
woc居然还是跑起来了
私有的还可以访问,证明spring内部用了反射
总结:spring造bean的时候,用了无参构造方法
Spring报错信息阅读:
显而易见的,spring报错时,信息量太大,根本没法看
直接拉到最后,先解决最后一个
最后一个解决不了再解决上一个
为什么呢,因为第一行是全部信息,越往下越精简
所以最后一行是最有价值的信息
bean实例化(静态工厂)
项目结构:
捣鼓了一个工厂 注意static
配置xml文件
跑起来
这就是早些年写代码的方式
对象不主动new,通过工厂送过来
bean实例化(实例工厂与FatoryBean)
非静态的,工厂
配置xml
先造工厂,再造bean
因为非静态,所以得整个实例化对象出来
纯粹为了造bean,没必要写那些啥工厂,太麻烦
改造,最好的工厂(后期学整合时,大量使用)
工厂实现类,加上泛型,确定生产的bean
这样配置xml就方便了
运行:
默认还是单例的
想修改其为非单例,可以
添加isSingleton() return true
bean生命周期
bean生命周期:bean从创建到销毁的整体过程
联想vue生命周期,反正就是到哪个阶段,触发你的代码
写在 bean的实现类 BookDaoImple.java
配置xml,方可成功
要想手动触发destory,可以代码手动关闭Ioc容器
也可以设置关闭钩子
这样在关闭虚拟机的时候(关闭程序),就会被触发
当然,这些都不需要我们关心
要想免配xml,可以按规则写代码
下文补充