Spring (IOC)配置
就是这个东西,里面的不同标签,所代表的不同含义
beans 里面有很多的bean ,每一个bean都是容器里面的一个对象
1.别名alias (另外的一个名字)

XML <alias name="cons_01" alias="constructor01"/> java // Constructor_01 cons_01 = (Constructor_01)context.getBean("cons_01"); Constructor_01 cons_01 = (Constructor_01)context.getBean("constructor01");
2.bean的配置
id :唯一的标识符
class :bean对象所对应的全限定名(包名+类名)
name :也是别名,更高级,可以取多个名字 (可以通过空格和逗号和分号分割)
3.import(一般用于团队开发,可以将多个配置文件导入合并为一个)
多个人开发,不同的类,需要注册在不同的beans(任意名)中,可以利用import将所有人的beans.xml合并为一个总的 ,最后使用总的就行
重名的话后面导入的会覆盖前面的
依赖注入
1.构造器注入(利用构造器[无参或有参]创建对象)
2.Set方式注入[重点] 依赖注入
依赖:bean对象的创建依赖于容器
注入:bean对象中的所有属性,由容器来注入(相关的xml 的配置文件)

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="adress" class="com.ljm.pojo.Address"> <!-- 不写的话就为null--> <property name="address" value="银河街道866号"/> </bean> <!-- p命名控件注入,可以直接注入属性的值 (property)--> <bean id="user" class="com.ljm.pojo.User" p:age="18" p:name="小明"/> <bean id="student" class="com.ljm.pojo.Student"> <!-- 普通值注入 依靠set方法注入 --> <property name="name" value="鸣人"/> <!-- bean注入使用ref--> <property name="address" ref="adress"/> <!-- 数组注入--> <property name="books"> <array> <value>红楼梦</value> <value>西游记</value> <value>三国演义</value> </array> </property> <!--List--> <property name="hobbys"> <list> <value>唱</value> <value>跳</value> <value>rap</value> </list> </property> <!-- map--> <property name="card"> <map> <entry key="农业银行" value="123"/> <entry key="平安银行" value="456"/> <entry key="招商银行" value="789"/> </map> </property> <!-- set--> <property name="games"> <set> <value>LOL</value> <value>DNF</value> <value>CF</value> </set> </property> <!-- 空字符串value="" ; null则是下面的方法--> <property name="wife"> <null/> </property> <!-- Properties key=value--> <property name="info"> <props> <prop key="学号">215845244</prop> <prop key="性别">男</prop> <prop key="姓名">里番</prop> </props> </property> </bean> <!-- more bean definitions go here --> </beans>
44
3.利用p命名空间:可以直接给属性赋值

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean name="john-classic" class="com.example.Person"> <property name="name" value="John Doe"/> <property name="spouse" ref="jane"/> </bean> <!-- 还可以ref引用其他bean对象--> <bean name="john-modern" class="com.example.Person" p:name="John Doe" p:spouse-ref="jane"/> <bean name="jane" class="com.example.Person"> <property name="name" value="Jane Doe"/> </bean> </beans>
4.利用c命名空间:可以利用构造器注入

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="thingOne" class="x.y.ThingTwo"/> <bean id="thingTwo" class="x.y.ThingThree"/> <!-- traditional declaration --> <bean id="thingOne" class="x.y.ThingOne"> <constructor-arg ref="thingTwo"/> <constructor-arg ref="thingThree"/> <constructor-arg value="[emailprotected]"/> </bean> <!-- c-namespace declaration --> <bean id="thingOne" class="x.y.ThingOne" c:thingTwo-ref="thingTwo" c:thingThree-ref="thingThree" c:email="[emailprotected]"/> </beans>
Bean的自动装配
自动装配是Spring满足bean依赖的一种方式
Spring会在上下文中自动寻找,并自动给bean装配属性
3种装配的方式
1.在XML中显示的配置
2.在java中显示配置
3.隐式的自动装配 [重要的]
基于上下文来判断

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="cat" class="com.ljm.pojo.Cat"/> <bean id="dog" class="com.ljm.pojo.Dog"/> <bean id="people" class="com.ljm.pojo.People" autowire="byType"> <property name="name" value="银河"/> </bean> </beans>
1.9使用注解实现自动装配(满足bytype和byname任意一方就行)
jdk 1.5 支持的注解 Spring2.5就支持注解
需要aop的包
Spring 允许以非侵入方式使用 注解,而无需接触目标组件的源代码,并且就工具而言,Spring 工具套件支持所有配置样式。

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> </beans>
具体实现, 因为是用反射机制赋予值, set方法可以省略(自动装配的属性在IOC[spring]容器中存在)

XML <context:annotation-config/> <bean id="cat" class="com.ljm.pojo.Cat"/> <bean id="dog" class="com.ljm.pojo.Dog"/> <bean id="people" class="com.ljm.pojo.People"/> .java //spring的注解 (常用) @Autowired @Qualifier(value = "cat15") // 当自动装配的2个条件都不满足时.可以指定容器中的某个id private Cat cat; @Autowired(required = false) //对象可以为空 容器中可以不装配相关对象 ,默认是true不为空 private Dog dog; //java的注解 (功能差不多) @Resource private Cat cat; //多个id匹配最像的那个 cat √ cat11 × @Resource (name="cat2") // 当自动装配的2个条件都不满足时.可以指定容器中的某个id private Cat cat;
可以使用在属性上,也可以在set方法上
@Component
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?