Spring介绍

Spring loc&Spring Aop

1:Spring loc:这是一个设计思想的意思,表示的是,在使用Dao实现业务代码的时候,不需要在自己创建对象,可以直接交给spring来实现(动态代理),会在springloc容器中创建一个bean对象,用于存储动态代理,springloc容器其实也就是个map类型的集合
2:Spring Aop:这是一个切面编程,Aop会使那些对业务功能实现没有关系,但是对业务共同代码有逻辑和权限的代码进行封装(例如:日志管理,权限管理,事物处理),减少系统的重复代码,降低耦合,延长代码的延展性。

Spring Bean作用域

关于proptotype&singletion介绍:
		1:proptotype这是一个在创建后spring将失去对Bean的控制(生命周期),将由客户端代码来控制,每次创建都会创建新的Bean对象
		2:singleton这是一个只要id和和Bean创建的相对应,那么将获得实例对象,该sigleton是保存在springloc容器中的
		

1:proptotype:在每次请求prototype的时候,会创建一个新的bean实例
2:session:在每次请求http的时候,都会创建一个新的bean实例,session中有效
3:request:在没每次请求http的时候,创建一个新的bean实例request中有效
4:golbalsession(全局session): 作用域是在全局session,但是要是在portlet中的web应用才可以使用,在spring5中已经弃用了
5:singleton:唯一的bean实例 ,singleton中的bean默认是单例的

Bean的定义:

Bean:就是springmvc设计模型中的JavaBean(数据model),是一个数据层,通过get/set来操作,用来设置数据的属性和行为,笼统的讲就是一个可复用的类。

Spring Bean单例线程安全问题

1:在多线程中Bean确实存在线程安全问题(在多个线程操作一个对象的时候,会出现线程安全问题),但是在我们常用的Dao,contller,Service是无状态的Bean所以我们常使用的Bean是不会受到线程安全问题
解决方法:
1:改用本地线程储存可变对象(Threadlocal)
2:使用prototype来存储可变对象,每次创建都会生成新的bean对象,所以不存在线程安全问题

关于@Compoent 和Bean的区别:

1:@component:通过类路径来自动扫描和甄别,并自动装载到spring容器中,主要是作用在类中的,把该类提交到spring容器中
2:@Bean:主要是对方法进行注释定义产生这个Bean,表示当我要用的时候,把这个示例给我,@Bean自定义性更强,在我们需要添加第三方的库的时候,只能使用@Bean,来把这个第三方库添加到spring容器中,也可以把自己所写的添加到spring容器中。

有哪些注释是可以申明该类是Spring Bean

现今比较常用的是@Awautowired,自动装配到springBean中,要实现这自动装配,那么有如下操作:
1:@contorller,常用与注解在springmvc中的控制层,常用来返回数据给前端
2:@service,常用于注解在springmvc的服务层,要用到Dao
3:@component,可用来标注spring任意组件,如果不知道Bean是什么层的话,可以使用该注解标识
4:@Respository:用在Dao层,主要是用于数据库的操作

关于Bean的生命周期

1:使用javaReflection (java反射)来创建Bean实例,
2:利用set方法来设置属性
3:实现了BeannameAware接口,调用setBeanName来传入Bean名字
4:如果实现了*.Aware,那么就使用对应的方法
5:加载关于这个Bean Spring容器的BeanPostProcessor对象执行postProcessBeforeInitialization方法
6: 如果这个Bean实现了InitializingBean接口,那么执行afterPropertiesSet()方法
7:如果配置文件定义包含init-methed(),执行指定方法
8:当要销毁Bean时,调用DisposableBean 类中的destroy()方法
9:当要销毁Bean时,如果配置文件中定义了destroy-method,那么执行指定方法

SpringMvc运行原理:

用户访问浏览器(request请求url)—>
前端控制器(接收请求和响应结果)---->
请求适配器(Handler)---->
处理器适配器(执行Handler)------>
来到Handler处理器(controller,并返回视图和模型)------->
处理器适配器(返回视图和模型)------>
前端控制器(输出视图)-------->
视图解析器(返回视图)------>
前端控制器----->
View视图(视图渲染,jsp,pdf,excel,freemaker,将模型填充到requert域中,不需要在传回前端控制器中了)
前端控制器(响应response)------>用户访问浏览器

Spring事务

关于@Transactional(rolbackfor=Exception.class)注解介绍:
异常介绍:
分为运行异常(RuntimeException)和非运行异常
当@Transactional注释在类上的时候,在该类的所有的public(公共的)方法都具有该@Transacyional的属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。那么在这公共的方法中,出现异常,那么将进行回滚(数据库也进行回滚数据),如果在@Transactional中不添rollbackfor=Execption.class,那么将只会在RuntimeException(运行异常中回滚),不会在非运行异常中回滚数据了,所以建议还是要加上。

如何使UserModel中的指定字段非持久话

(也就是不会被数据库存储)
1:static
2:findal
3:transient
4:在字段上面添加注释,@transient

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值