Spring框架

Spring框架

Java应用最广泛的框架,它的成功来源于理念,而不是技术本身

  • IOC:控制反转
  • AOP:面向切面编程
  • DI:依赖注入

非侵入式设计:
不需要继承框架提供的任何一个类,即使跟换框架,代码也不需要大改。

JavaBean

SpringBean是JavaBean的扩展,现在的JavaBean作为一个对象,提供set、get方法
SpringBean只需要为接收设置值注入set方法

Spring优势:

  • 低侵入
  • 声明式事务
  • 方便继承其他框架
  • 提供了Javaweb三层的每一层的解决方案

Spring能帮我们干什么?:
装修:
1.自己干 ×
2.找装修公司 √

IOC容器:

控制反转
可以把对象放进容器中,交给Spring去管理,并且还是单例的

	把对象放进容器中,对象一旦放入容器中,这个对象在我当前的项目中就可以共享,而且默认还是单例的
	id:这个对象在IOC容器中的唯一标识
    	class:要放到spring的IOC容器中的全类名
	<bean id="user" class="com.jsoft.entity.User">

把容器中的对象拿出来

 public void IOCTest() {
 加载Spring配置文件
    ApplicationContext ioc = new ClassPathXmlApplicationContext("application.xml");
    这个user对象是从ioc容器中获取到的
    User user = (User)ioc.getBean(User.class);
    user.say();
    System.out.println(user);
}

属性注入:

ref:依赖,当使用ref属性,依赖于当前容器中已经存在的bean,进行属性的注入
scope:定义bean的作用域

  • prototype:原型
  • singleton:单例(默认)
  • request:一次请求
  • session:一次会话

1.构造器注入:根据参数名,根据索引位置,根据参数类型

	<bean id="user" class="com.jsoft.entity.User">
		<constructor- arg value="jsoft" name="name"></constructor-arg>
	</bean>
	调用user类中的有参构造参数

2.setter注入:调用set方法来进行属性注入(常用)

	<bean id="user" class="com.jsoft.entity.User">
		<property name="name" value="JSOFT"></ property>
	</bean>

更多复杂的setter注入

  • 自定义的数据类型(address):

      如果bean要注入的是一个对象,那这个对象也要先注册到IOC容器中
      <bean id="address" class="com.jsoft.entity. Address">
      	<property name="info" value="高新区"></ property>
      </ bean>
      
      <bean id="user" class="com.jsoft.entity.User">
      <property name="name" value="JSOFT"></ property>
      依赖当前容器中存在bean来注入
      <property name="address" ref="address"></property>
      </bean>
    
  • 数组

      <property name="hobbies">
          <array value-type="java.lang.String">
              <value>篮球</value>
              <value>足球</value>
          </array>
     </property>
    
  • List集合

      <property name="duties">
      	<list value-type="java.lang.S
         	<value>董事长</value>
      	  <value>总经理</value>
     	</list>
      </property>
    
  • set集合

        <property name="carts">
            <set value-type="java.lang.String">
      	   <value>韭菜</value>
               <value>鸡蛋</value>
          	</set>
     </property>
    
  • Map集合

      <property name="map">
       <map>
            <entry key="父亲" value="马云"></entry>
            <entry key="母亲" value="张瑛"></entry>
          </map>
      </property>
    
  • Properties

      <property name="properties">
       <props>
      	    <prop key="阿里巴巴">达摩院</prop>
       </props>
      </property>
    

自动装配

autowire:自动装配
byName:根据属性名去IOC容器中找名字相同的bean进行自动注入
byType:根据属性的类型自动注入

	<bean id="user" class="com.jsoft.entity.User" autowire="byName">

注解:自动装配

context: component-scan base-package="com.jsoft.entity"</context:component-scan>
并且在类中加上
@Autowirit
强制注解其他
@Qualifier ( " address1")
@Resource

Spring的bean生命周期:

1.构造器
2.注入
3.初始化
4.目标方法
5.销毁

懒初始化(延迟初始化、Servlet的初始化默认就是懒初始化)
而spring的IOC容器默认就不是懒初始化,只要spring的容器启动,所有的bean都会加载,都会初始化

AOP

  • 面向切面编程,主要用来解决一些系统层面的问题,比如日志,事务,权限
  • 在不改变元哦有的逻辑的基础上,增加游戏额额外的功能
  • AOP是OOP(面向对象)补充和完善
  • AOP横切技术,解剖开对象的内部,把一些和业务无关,都可以为业务共同的调用的逻辑封装起来,减少重复代码的使用。

通知:

增强处理(Advice),就是你想要的功能,日志,事务,权限,安全....
首先定义好,然后在想用的地方,Adivce配合Aspect的一段处理代码

连接点

JoinPoint
就是spring允许你通知的地方,一个service层的方法需要配置通知,获取这个方法的参数,方法名,返回值...

切入点(PointCutm)

一个类中有20个方法,让这20个方法中的15个在方法执行之前,执行之后或者抛出异常时干点什么,使用切入点表达式来筛选连接点。

切面

通知+切入点的结合。在什么个点上去干什么事。

织入

被通知的对象,真正的业务逻辑,可以毫不知情。两者互相之间可能并不知情,专注于自己该做的事。

posted on   figh466  阅读(29)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示