自学内容网 自学内容网

Spring6(IOC)

Spring Formwork特点:

非侵入式:使用 Spring Framework开发应用程序时,Spring 对应用程序本身的结构影响非常小。对领域模型可以做到零污染;对功能性组件也只需要使用几个简单的注解进行标记,完全不会破坏原有结构,反而能将组件结构进一步简化。这就使得基于 Spring Framework 开发应用程序时结构清晰、简洁优雅。
控制反转:10c--Inversion of control,翻转资源获取方向。把自己创建资源、向环境索取资源变成环境将资源准备好,我们享受资源注入。
面向切面编程:AOP--Aspect Oriented Programming,在不修改源代码的基础上增强代码功能.容器:Spring 10c是一个容器,因为它包含并且管理组件对象的生命周期。组件享受到了容器化的管理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发效率。
组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用:在 Spring 中可以使用 XML 和Java 注解组合这些对象。这使得我们可以基于一个个功能明确、边界清晰的组件有条不紊的搭建超大型复杂应用系统。
一站式:在 10C和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。而且 Spring 旗下的项目已经覆盖了广泛领域,很多方面的功能性需求可以在 Spring Framework的基础上全部使用 Spring来实现。

IOC(控制反转):

1.Spring 通过 loc 容器来管理所有 Java 对象的实例化和初始化,工控制对象与对象之间的依赖关系。我们将由 Ioc 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有:任何区别。

2.控制反转,反转的是什么?
将对象的创建权利交出去,交给第三方容器负责,
将对象和对象之间关系的维护权交出去,交给第三方容器负责

Bean:
xml
获取Bean的三种方式

1.id方式         <bean id="user" class="com.atzjl.spring.iocxml.User"></bean>
                        User user = (User) context.getBean("user");

2.根据类型获取     User user = context.getBean(User.class);  (bean只有一个配置方式才能用)

3.根据id和类型

依赖注入(setter)

<bean id="car" class="com.atzjl.spring.iocxml.set.Car"> <property name="cName" value="宝马"></property> <property name="vison" value="5系"></property>
</bean>

依赖注入(构造器注入)
<bean id="car1" class="com.atzjl.spring.iocxml.set.Car">
    <constructor-arg index="0" value="奔驰"></constructor-arg>
    <constructor-arg index="1" value="8s"></constructor-arg>
</bean>
特殊值处理

1.字面量赋值   就是简单的数字字母赋值
2.null:<null><null/>
3.xml实体:使用<>时用转义
4.CDATA节:<value><![CDATA[这里写符号]]></value>

对象注入
引用外部bean
<bean id="computer" class="com.atzjl.spring.iocxml.set.Compuder">
    <property name="name" value="DEll"></property>
    <property name="page" value="独显+i5"></property>
</bean>
<bean id="student" class="com.atzjl.spring.iocxml.set.Student">
    <property name="name" value="张三"></property>
    <property name="age" value="21"></property>
    <property name="seix" value="男"></property>
    <property name="compuder" ref="computer"></property>
</bean>
引用内部bean
<bean id="studnt02" class="com.atzjl.spring.iocxml.set.Student">
    <property name="name" value="张三"></property>
    <property name="age" value="21"></property>
    <property name="seix" value="男"></property>
    <property name="number" value="24002"></property>
    <property name="compuder">
        <bean id="computer01" class="com.atzjl.spring.iocxml.set.Compuder">
            <property name="name" value="外星人"></property>
            <property name="page" value="4090+i7"></property>
        </bean>
    </property>
</bean>
级联属性赋值
<bean id="student03" class="com.atzjl.spring.iocxml.set.Student">
    <property name="name" value="孙悟空"></property>
    <property name="age" value="2500"></property>
    <property name="seix" value="未知"></property>
    <property name="number" value="0001"></property>
    <property name="compuder" ref="computer"></property>
    <property name="compuder.name" value="冯诺亿万计算机"></property>
    <property name="compuder.page" value="二进制打点"></property>
</bean>
数组赋值
<property name="hobbies">
    <array>
        <value>抽烟</value>
        <value>喝酒</value>
        <value>烫头</value>
    </array>
</property>
list集合赋值
<property name="students">
    <list>
        <ref bean="studentOne"></ref>
        <ref bean="studentTwo"></ref>
        <ref bean="studentThree"></ref>
    </list>
</property>
map集合赋值
<property name="teacherMap">
    <map>
        <entry>
            <key>
                <value>10010</value>
            </key>
            <ref bean="teacherOne"></ref>
        </entry>
        <entry>
            <key>
                <value>10086</value>
            </key>
            <ref bean="teacherTwo"></ref>
        </entry>
    </map>
</property>
bean的生命周期
  • bean对象创建(调用无参构造器)

  • 给bean对象设置属性(依赖注入)

  • bean的后置处理器(初始化之前)befor方法重写 implements BeanPostProcessor 

  • bean对象初始化(需在配置bean时指定初始化方法)init-method

  • bean的后置处理器(初始化之后)after方法 重写 implements BeanPostProcessor 

  • bean对象就绪可以使用

  • bean对象销毁(需在配置bean时指定销毁方法)destroy-method

  • IOC容器关闭

bean的作用域

singleton(默认)单例        IOC容器初始化时创建        
prototype        多例        获取bean时        scope="prototype"
request        在一个请求范围内有效
session        在一个会话范围内有效

xml自动装配

byType        写法autowire="byType"       实现只能有一个
byName        写法autowire="byName" id必须和变量名一致

注解

开启注解
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
<context:component-scan base-package="指定扫描的包">
       <!-- context:include-filter标签:指定在原有扫描规则的基础上追加的规则 -->
    <!-- use-default-filters属性:取值false表示关闭默认扫描规则 -->
    <!-- 此时必须设置use-default-filters="false",因为默认规则即扫描指定包下所有类 -->
    <!-- 
         type:设置排除或包含的依据
        type="annotation",根据注解排除,expression中设置要排除的注解的全类名
        type="assignable",根据类型排除,expression中设置要排除的类型的全类名
    -->
</context:component-scan>
@Component         @Repository         @Service         @Controller

自动注入

@Autowired        默认根据type注入 @Qualifier注解联合(根据名称注入)
可以加载方法上,属性上,构造器上,参数上

@Resource        根据名称装配byName未指定name时,使用属性名作为name。通过name找不                                的话会自动启动通过类型byType装配
(属性上、setter方法上 )
<dependency>高于JDK11或低于JDK8需要引入以下依赖
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>2.1.1</version>
</dependency>

全注解开发(编写配置类)

@Configuration(标识是一个配置类)

@ComponentScan("扫描的包")(开启组件扫描)

AnnotationConfigApplicationContext(加载配置类)


原文地址:https://blog.csdn.net/weixin_70421146/article/details/143913761

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!