spring初接触day1

三大层技术

我们常用的三层技术,即service层,dao层,web层。之前学习的技术,与之相对应的是dao——hibernate,web——Struts。
接下来的service——spring。而spring中其实也涉及到其他两层的技术,dao——mybatis,web——springmvc。

1.spring核心

spring核心是控制反转(IOC)和切面编程(AOP)

2.spring的优点

  1. 方便解耦,简化开发(高内聚低耦合)。
  2. spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给spring管理。
  3. spring工厂用于生产bean
  4. spring提供面向切面编程,很方便的实现对程序进行权限拦截,运行监控等功能。
  5. 只需要通过配置就可以完成对事务的管理,而无需手动编程。
  6. spring对Junit支持,可以通过注解方便的测试spring程序
  7. spring可以集成各种优秀的开源框架。
  8. spring对一些难用的API都进行了封装,方便我们的使用。

3.spring的核心容器

spring核心容器:beans,core,context,expression

4.IOC编程

提供UserService接口和实现类
获得UserService实现类的实例
由spring创建对象实例->Ioc控制反转之后需要实例对象时,从spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中
牢记所有的bean都是有spring的配置文件生产,我们只要编写接口+实现类即可。

5.DI依赖注入

is a : 是一个 ,代表继承
has a:有一个,代表依赖,如

class B{
	private A a;//B类依赖A类
}

依赖:一个对象需要使用另一个对象
注入:通过setter方法对另一个对象进行实例设置

例如:

class BookServiceImpl{
	//之前开发:接口 = 实现类(service和dao耦合)
	//private BookDao bookDao = new BookDaoImpl();
	//spring之后,(解耦:service实现类使用dao接口,不知道具体的实现类)
	private BookDao bookDao;
	setter方法
	//模拟spring执行过程
	//创建service实例:BookService bookService = new BookServiceImpl();        ->IoC <bean>
	//创建dao实例:BookDao bookDao = new BookDaoImpl();                        ->IoC
	//将dao设置给service:bookService.setBookDao(BookDao);                     ->DI <property>
	
}

5.装配bean基于xml

3种bean实例方式:默认构造,静态工厂,实例工厂

5.1默认构造

<bean id="" class="">    //必须提供默认构造

5.2静态工厂

常用与spring整合其他框架(工具)
静态工厂:用于生成实例对象,所有的方法必须是static

<bean id="" class="工厂全限定类名/类路径" factory-method="静态方法">

5.3实例工厂

实例工厂:必须先有工厂实例对象,通过实例对象创建对象。提供所有者的方法都是“非静态”的。

 <!-- 创建工厂实例 -->
 <bean id="myBeanFactory" class="com.itheima.c_inject.c_factory.MyBeanFactory"></bean> 
 <!-- 获得userservice * factory-bean 确定工厂实例 * factory-method 确定普通方法 --> 
 <bean id="userServiceId" factory-bean="myBeanFactoryId" factory-method="createService"></bean>

5.4Bean种类

1.普通bean:之前操作的都是普通bean。<bean id="" class="A">,spring直接创建A实例,并返回。
2.FactoryBean:是一个特殊的bean,具有工厂生成对象能力,只能生成特定的对象。
bean必须使用FactoryBean接口,此接口提供方法getObject()用于获得特定bean。
<bean id="" class="FB">先创建FB实例,调用getObject()方法,并返回方法的返回值

FB fb = new FB();
return fb.getObject();

3.BeanFactory 和FactoryBean 对比?
BeanFactory:工厂,用于生成任意bean。
FactoryBean:特殊bean,用于生成另一个特定的bean。例如:ProxyFactoryBean,此工厂bean用于生产代理。<bean id="" class="...ProxyFactoryBean">获得代理对象。 AOP使用

5.5作用域

作用域:用于确定spring创建bean实例个数
singleton:在Spring IoC容器中仅存在一个Bean实例,Bean以单例方式存在,默认值
prototype:每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行new XxxBean()
request:每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
session:同一个HTTP session共享一个bean,不同session使用不同bean,仅适用于WebApplicationContext环境
globalSession:一般用于Protlet应用环境,该作用域仅适用于WebApplicationContext环境

取值:
singleton 单例,默认值。
prototype 多例,每执行一次 getBean将获得一个实例。例如:Struts整合spring,配置action多例。
配置信息:

<bean id="" scope="">

5.6BeanPostProcessor后处理bean

spring提供一种机制,只要实现此接口BeanPostProcessor,并将实现类提供给spring容器,spring容器将自动执行,在初始化方法前执行before(),在初始化方法后执行after()。配置<bean class="">
spring提供工厂勾子,用于修改实例对象,可以生成代理对象,是AOP底层

A a = new A();
a = B.before(a);		->将a的实例对象传递给后处理bean,可以生成代理对象并返回。
a.init();
a = B.after(a);
a.addUser();			//生成代理对象,目的在目标方法前后执行(例如:开启事务,提交事务)
a.destory();

5.7 属性依赖注入

1.依赖注入方式:手动装配和自动装配
2.手动装配:一般进行配置信息都采用手动
基于xml装配:构造方法、setter方法
基于注解装配:
3.自动装配:Struts和spring整合可以自动装配
byType:按类型装配
byName:按名称装配
constructor:构造装配
auto:不确定装配

5.8集合注入

集合注入都是给< property>添加子标签
数组:< array>
List:< list>
Set:< set>
Map:< map> ,map存在k/v键值对,使用< entry>描述
Properties:< props> < prop key="">< /prop>

普通数据:< value>
引用数据:< ref>

6装配bean基于注解

注解:就是一个类,使用@注解名称
开发中:使用注解 取代xml配置文件

  1. @Component 取代< bean class="">
  2. @Component(“id”) 取代 < bean id="" class="">
    @Repository:dao层
    @Service:service层
    @Controller:web层
  3. 依赖注入,给私有字段设置,也可以给setter方法设置
    普通值:@Value("")
    引用值:
    方式1:按照【类型】注入
    @Autowired
    方式2:按照【名称】注入
    @Autowired
    @Qualifier(“名称”)
    方式3:按照【名称】注入2
    @Resource(“名称”)
  4. 生命周期
    初始化:@PostConstruct
    销毁:@PreDestory
  5. 作用域
    @Scope(“prototype”)多例
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值