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");
View Code
复制代码

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>
View Code
复制代码
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>
View Code
复制代码

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>
View Code
复制代码

 

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>
View Code
复制代码

 

 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>
View Code
复制代码

 具体实现, 因为是用反射机制赋予值, 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;
View Code
复制代码

可以使用在属性上,也可以在set方法上  

 

 

 

@Component

 

 

 

 

 

posted @   磕伴  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示