目录
工厂模式
1.什么是框架?
2.Spring的优势
3.举个User小例子
IOC控制反转
beans
单例模式
1.使用构造方法来创建对象
2.使用静态工厂来创建对象
3.使用实例工厂方法来创建对象
依赖注入(DI注入)
1.set方法注入(跟set方法名绑定)
2.构造方法注入
3.自动注入
@Component
工厂模式
把原来分布在各个地方的对象创建的过程都单独抽离出来,统一交给工厂类来负责所需对象的创建
1.1框架本身一般不完整
1.2在里面进行填充扩展,迎合公司的业务需求,做公司的项目
1.3为了更好的适合大多数项目,不断进行扩展,扩充的东西就是类库
2.1方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给Spring来管理
2.2方便集成各种优秀的框架
2.3方便程序的测试
支持Unit4,可以通过注解测试
2.4AOP编程的支持
2.5声明式事务的支持
2.6降低Java EE API的使用难度
先在main-po里面创建一个User简单实体类,提供无参构造方法
在resource里面application.xml中写
调用:
BeanFactory factory = new ClassPathXmlApplicationContext("application.xml"); User user = (User) factory.getBean("user");
解析:ClassPathXmlApplicationContext()
ClassPath:根路径 resource位置
Xml:读一个后缀是.xml文件
ApplicationContext:读里面的东西,全纳入到spring容器中
new ClassPathXmlApplicationContext(“”)表示读取appication.xml配置文件,spring把里面所有的Bean都创建出来了,通过.getBean()里面的id名确定找哪一个对象(默认情况下,配置文件中所有的Bean都要创建一遍)
getBean("
总结:控制反转:对象创建的过程交给spring容器来管理
IOC控制反转
控制权的转移,以前由程序控制对象的创建以及对象之间的依赖关系,现在由spring容器进行管理
(对象的创建不再由调用者管理,而是由spring容器进行创建。Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制)
配置文件中详解
beans
id="":相当于类的对象名,必须保证唯一
class="包名.类名(全限定名)":底层自动使用反射方式,创建该类的对象,并通过id进行标识(不能写接口)
把User类纳入到Spring容器中进行管理,当程序运行的时候,在spring容器中,创建一个User对象
单例:在程序的整个运行过程中,该类有且仅有一个对象
查看是不是单例,就看地址是否一样(对象名==对象名)对象名保存的是地址值,看是否相等
scope="singleton" 单例模式(默认值),读取配置文件的时候,直接创建该类对象,并且唯一
scope="prototype" 多例模式,读取配置文件的时候,不创建该类对象,只有当每次调用getBean()时,才会创建该类对象
lazy-init="true/false":延迟加载 只有是单例的时候,延迟加载才有意义
true:懒加载,只有当使用的时候才会创建对象
false:不懒加载,读取配置文件立刻创建该类对象
init-method="init":初始化方法
destory-method="destory":销毁方法
factory.getBeanDefinitionCount():有多少Bean
factory.getBeanDefinitionNames():获取容器中所有bean的id的名字
FileSystemXmlApplicationContext():带系统字样的,全是绝对路径
Spring中创建Bean对象的常用方式 1.使用构造方法来创建对象在bean里面,
创建一个factory包,里面写一个静态方法调用User
先找到工厂类,再找到工厂类里面的方法来创建对象
3.1创建实例工厂
3.2指定工厂方法
组件(Bean)之间的依赖关系由容器在运行的时候来决定
容器动态的将依赖的组件注入到对应的bean中
写dao,service实例
service实现类中写privite UserDao userDao;写set方法;
在application.xml中写
property中name写set方法名set后面首字母小写,ref写当前关联的bean id名(Dao中id名)
测试:
ApplicationContext factory = new ClassPathXmlApplicationContext("application.xml"); UserService userService = (UserService) factory.getBean("userService"); userService.addUser();2.构造方法注入
同上,set方法换构造方法
在application.xml中写
constructor中name写构造方法参数名,ref写当前关联的bean id名(Dao中id名)
假设一个案例:需要换数据库
如果修改数据库,只需要重写dao层即可
之前方法:在serviceImpl中写不同的实现类
DI注入:不需要改业务层代码,只需要在配置文件中修改依赖关系
在类上添加@Component注解,表示该类创建对象的权限交给spring容器。
等价于
注解的value属性用于指定bean的id值,value可以省略。
@Component不指定value属性,bean的id是类名的首字母小写
Autowire="byName"
需要注解扫描包
加了@Component,省略了
userServiceImpl中需要userDao,扫描一下,发现一个也叫userDao,自动注入到当前的对象当中然后调用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)