Spring - 相关配置和注入方式
  cEe6YWJIAuf2 2023年11月05日 79 0


Spring 配置

spring作为一种框架,里边有许多不同的配置,这里重点讲解三种配置:别名配置,Bean配置,Import配置

别名配置

<!--参数名-->
    <bean id="main" class="com.xh.Main">
        <constructor-arg name="user" value="小黑"/>
    </bean>

    <!-- alias 起别名  name 是  Main main = (Main) context.getBean("main"); -->
    <alias name="main" alias="yl"/>

alias 为spring起别名的关键字,在xml文件中通过alias给第一个 id = “main” 起个别名为 yl
如上所示.

//通过别名
  Main main = (Main) context.getBean("yl");
  //传统方式
  Main main1 = (Main) context.getBean("main");

Bean配置
实际上就是指向实体类里边

<bean id="userT" class="com.xh.UserT" name="user2,u2 u3;u4">
        <property name="user" value="小黑"/>
    </bean>
     <!--    // 别名可控制 UserT userT = (UserT) context.getBean("u2");-->

Import一般用于团队开发,将多个模块导程一个

//        ApplicationContext context=  new ClassPathXmlApplicationContext("application.xml");
application.xml
<import resource="bean.xml"/>
<import resource="bean2.xml"/>
<import resource="bean1.xml"/>

无需担心重名他会自己选择。

DI依赖注入

注入方式:这里我们讲解三种 构造器注入,set方法注入,拓展

构造器注入
也就是我们常用的有参构造和无参构造

Set方式注入【重点】
依赖注入:set注入
依赖: bean对象的创建依赖于容器
注入: bean对象中的所有属性由容器注入

public class Address {
    private  String address;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
private String name;
    private Address address;
    private String[] books;
    private List<String> hobby;
    private Map<String,String> card;
    private Set<String> games;
    private String wife;
    private Properties info;
<?xml version="1.0" encoding="UTF-8"?>
<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="student" class="com.xh.Student">
        <!--第一种普通值注入 value-->
        <property name="name" value="小黑"/>
    </bean>

</beans>
public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        Student student = (Student) context.getBean("student");
        System.out.println(student.getName());

    }

拓展方式注入

我们可以通过p命名空间注入

<?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"
       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">


<!--   p set 命名空间注入,可以简介注入 : property-->
    <bean id="user" class="com.xh.User" p:uname="小黑" p:age="18">
    </bean>
<!--  C命名空间必须通过构造器注入才行 有参无参构造 construct-args 注入  -->
    <bean id="user2" class="com.xh.User" c:age="18" c:uname="颜*"/>
</beans>
P:   
public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        Student student = (Student) context.getBean("student");
        //System.out.println(student.getName());
        System.out.println(student.toString());
    
C:
      @Test
    public void test(){
        ApplicationContext context = new
                ClassPathXmlApplicationContext("userBean.xml");
       User  user =  context.getBean("user2", User.class);
        System.out.println(user);
    }

注意: p:命名空间使用Set方式注入,而C:命名空间是使用构造器注入,有参构造,无参构造都要有,且p,c都需要导入依赖才能使用,不能直接使用

xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"

拓展一下:
spring里边我们可以配置单例和原型模式,这是自带的:

单例模式:(Spring默认机制)

<bean id="user3" class="com.xh.User" c:age="18" c:uname="颜*" scope="singleton"/>

原型模式:每次从容器中get的时候都会产生一个新对象

<bean id="user4" class="com.xh.User" c:age="18" c:uname="颜*" scope="prototype"/>

其余的request ,session,application这些只能在web开发中使用!


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
cEe6YWJIAuf2