Spring笔记-ioc2 IOC创建对象方式 构造器注入 Spring的配置 有参的三种注入方式 alias name import

昨天写的没了真是吐了

IOC创建对象方式

1.通过无参数构造方法:

1.1 仅有无参构造方法且无属性值

建立一个Hello实体类: 里面有一个无参数构造方法

package com.lx.pojo;

public class Hello {
    public Hello() {
        System.out.println("Hello已被创建");
    }
}

创键spring容器,beans.xml,在里头注册Hello类对象

    <bean id="hello" name="h1 h2,h3;h4" class="com.lx.pojo.Hello">

测试单元:

 @Test
    public void testhello(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

    }

测试结果:
在这里插入图片描述
我们在创建这个容器中,并没有在测试类中创建hello对象,但Hello中的无参构造方法输出了,
证明对象是有Spring容器创建的,在读取[spring].xml文件时创建的

1.2 仅有无参数构造方法,且有属性

创建一个实体类:

package com.lx.pojo;

public class User {
    private String name;

    //仅有无参数构造方法

    public User() {
        System.out.println("User的无参数构造方法");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("Name="+this.name);
    }
}

在bean中,可以通过无参直接创建不赋值,也可以创建时通过property对属性赋值

<bean id="user" class="com.lx.pojo.User"/>

    <bean id="user1" class="com.lx.pojo.User">
        <property name="name" value="user1"/>
    </bean>

测试单元:

  @Test
    public void testUser(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        System.out.println("==============");
        User user = context.getBean("user", User.class);
        user.show();
        System.out.println("=========");

        User user1 = context.getBean("user1", User.class);
        user1.show();

    }

测试结果:
一个为null,一个为user1
在这里插入图片描述
bean注入依赖于set方法,所以属性必须要有set方法


2. 通过有参数构造方法

2.1 仅有有参构造方法 有参那必须要有属性啊

创建一个实体类:

package com.lx.pojo;

public class User1 {

    private String name;


    //仅有有参数构造方法
    public User1(String name) {
        System.out.println("User1的有参数构造方法");
        this.name=name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("Name="+this.name);
    }
}

在bean中通过constructor-arg 有参构造 必须要用constructor-arg,因为只有有参改造方法

 <bean id="userone" class="com.lx.pojo.User1">
        <constructor-arg name="name" value="lx-User1"/>
    </bean>

测试单元:

@Test
    public void testUser1(){

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User1 userone = context.getBean("userone", User1.class);
        userone.show();


    }

测试结果:
在这里插入图片描述

有参的三种构造方式

2.2 有参构造且同时有无参构造

其实就是既可以用property进行无参属性注入,也可以用有参的construct-arg下面着重介绍有参的三种构造方式

创建一个实体类:

package com.lx.pojo;

public class User2 {

    private int id;
    private String name;
    private String Address;


    public User2() {
        System.out.println("User2的无参数构造方法");
    }


    public User2(int id, String name, String address) {
        System.out.println("User2的有参数构造方法");
        this.id = id;
        this.name = name;
        Address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAddress() {
        return Address;
    }

    public void setAddress(String address) {
        Address = address;
    }

    public void show(){
        System.out.println("Name="+this.name);
    }

    @Override
    public String toString() {
        return "User2{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", Address='" + Address + '\'' +
                '}';
    }
}

在bean中注册:

2.2.1 第一种 根据参数名字 ★★★★★★

有参构造constructor-arg - name -value 推荐简单好用可读性强

<bean id="User2ByName" class="com.lx.pojo.User2">
        <constructor-arg name="id" value="233"/>
        <constructor-arg name="name" value="通过name属性赋值"/>
        <constructor-arg name="address" value="无家可归"/>
    </bean>
2.2.2 第二种 根据参数下标

通过有参构造属性的顺序,进行赋值 constructor-arg - index - value
一般 不咋好用

<bean id="User2ByIndex" class="com.lx.pojo.User2">
        <constructor-arg index="0" value="250"/>
        <constructor-arg index="1" value="通过下标赋值"/>
        <constructor-arg index="2" value="无家可归"/>
    </bean>
2.2.3 第三种 根据参数类型 不推荐

就这样根据type,碰上多个相同类型的还是需要根据参数下标顺序 可读性不好还乱,个人不推荐

<bean id="User2ByType" class="com.lx.pojo.User2">
        <constructor-arg type="int" value="250"/>
        <constructor-arg type="java.lang.String" value="通过参数类型赋值"/>
        <constructor-arg type="java.lang.String" value="无家可归2"/>
    </bean>

测试单元:

  @Test
    public void testUser2(){

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        System.out.println("\n");
        User2 user2ByName = context.getBean("User2ByName", User2.class);
        System.out.println(user2ByName.toString());

        System.out.println("\n");

        User2 user2ByIndex = context.getBean("User2ByIndex", User2.class);
        System.out.println(user2ByIndex.toString());

        System.out.println("\n");

        User2 user2ByType = context.getBean("User2ByType", User2.class);
        System.out.println(user2ByType.toString());


    }

测试结果:
在这里插入图片描述


Spring的配置

别名

alias 设置别名 , 为bean设置别名 , 可以设置多个别名

<alias name="User2ByName" alias="哈哈"/>
 @Test
    public void testhaha(){

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User2 哈哈 = context.getBean("哈哈", User2.class);
        System.out.println(哈哈.toString());


    }

在这里插入图片描述

Bean的配置

  • id 是bean的标识符,要唯一,
  • 如果没有配置id,name就是默认标识符
  • 如果配置id,又配置了name,那么name是别名 name可以设置多个别名,可以用逗号,分号,空格隔开
  • 如果不配置id和name,可以根据applicationContext.getBean(.class)获取对象;
  • class是bean的全限定名=包名+类名
 <bean id="User2"  name="u user2,u2;us2" class="com.lx.pojo.User2">
        <property name="name" value="usertwo3"/>
        <property name="id" value="1111"/>
        <property name="address" value="name的别名设置"/>
    </bean>
@Test
    public void testname(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        User2 u3 = context.getBean("u3", User2.class);
        System.out.println(u3.toString());

    }

在这里插入图片描述

import

团队的合作通过import来实现 .

<import resource="{path}/beans.xml"/>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值