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)!