Spring介绍 Spring配置文件

举报
花花叔叔 发表于 2022/08/13 00:37:20 2022/08/13
【摘要】 文章目录 快速入门Bean标签范围配置依赖注入注入普通的数据类型注入List,Map,Propertiesimport和知识点 快速入门 补充知识点 – 关于java的三层结构设计 一般...

快速入门

补充知识点 – 关于java的三层结构设计

一般情况下就是在service层里面new一个dao层对象,现在使用Sping之后就是从Spring框架中获取dao层对象。

在这里插入图片描述
在这里插入图片描述
第一个Spring程序

首先先创建一个maven项目
在这里插入图片描述
在这里插入图片描述
之后填写公司名,项目名称,之后在setting中配置maven

在这里插入图片描述
在这里插入图片描述
注意:有的需要配置到bin目录下,有的则不需要配置到目录下。

导入Spring开发的基本包坐标

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
    </dependencies>

编写dao层接口和实现类

package dao;

public interface UserDao {

    public void save();
}

package dao.impl;

import dao.UserDao;

public class UserDaoImpl implements UserDao {

    public void save() {

        System.out.println("save running");

    }
}

创建Spring核心配置文件 – 一般取名字是applicationContext.xml

在这里插入图片描述
在Spring配置文件中配置UserDaoImpl

<?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="userDao" class="dao.impl.UserDaoImpl"></bean>

</beans>

使用SpringAPI获取Bean实例

package demo;

import dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserDaoDemo {

    public static void main(String[] args) {

        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

        UserDao userDao = (UserDao)app.getBean("userDao");

        userDao.save();

    }

}

Bean标签范围配置

在这里插入图片描述
singleton的话,容器中只有一个dao层对象,如果使用prototype,容器中会有多个dao层对象。
测试方法就是new出两个对象,检查两个对象的地址是否一致。

当scope的取值为singleton时,容器中只有一个对象,这个bean对象的出现时机:当Spring配置文件被加载时候(就时Spring容器创建的时候),Bean对象同时创建。

当scope取值为prototype时,Bean对象是多个,时机:当调用getBean()时候实例化Bean对象。

测试上面两种情况的方法就是构造器+断点。

依赖注入

原始情况下,需要向容器中拿两次。
在这里插入图片描述
解决方案 – 内部注入,拿一次
在这里插入图片描述
通过set方法注入。-- 修改UserServiceImpl层

public class UserServiceImpl implements UserService {

    UserDao userDao = null;


    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void save() {

        /*ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

        UserDao userDao = (UserDao)app.getBean("userDao");*/

        userDao.save();

    }

}

就是在配置文件中进行配置,然后通过set方法注入到成员变量userDao中。

配置文件

<?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="userDao" class="dao.impl.UserDaoImpl" scope="prototype"></bean>

    <bean id="userService" class="service.impl.UserServiceImpl" scope="prototype">
        <property name="userDao" ref="userDao"></property>
    </bean>

</beans>
<property name="userDao" ref="userDao"></property>
name就是set方法的名字 -- setUserDao将set去掉,然后将U改为小写u,ref就是上面那个id名字

通过构造器注入 – 就是通过构造器将成员变量userDao赋值

public class UserServiceImpl implements UserService {

    UserDao userDao = null;

    public UserServiceImpl() {
    }

    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    /*public void setUserDao(UserDao userDao) {
                this.userDao = userDao;
            }
        */
    public void save() {

        /*ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

        UserDao userDao = (UserDao)app.getBean("userDao");*/

        userDao.save();

    }

}

配置文件

<bean id="userService" class="service.impl.UserServiceImpl" scope="prototype">
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    </bean>
<constructor-arg name="userDao" ref="userDao"></constructor-arg>

name指的是构造器中的参数名字,ref指的还是上面的id

注入普通的数据类型

public class UserDaoImpl implements UserDao {

    private String userName;

    private String age;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public void save() {

        System.out.println(userName + "----" + age);

        System.out.println("save running");

    }
}

<bean id="userDao" class="dao.impl.UserDaoImpl" scope="prototype">
        <property name="userName" value="孙悟空"></property>
        <property name="age" value="18"></property>
    </bean>

注入List,Map,Properties

private List<String> list;

    private Map<String,String> userMap;

    private Properties properties;
<bean id="userDao" class="dao.impl.UserDaoImpl">
        <property name="list">
            <list>
                <value>aaa</value>
                <value>aaa</value>
                <value>aaa</value>
            </list>
        </property>

        <property name="userMap">
            <map>
                <entry key="1" value="A"></entry>
                <entry key="2" value="B"></entry>
                <entry key="3" value="C"></entry>
            </map>
        </property>

        <property name="properties">
            <props>
                <prop key="pop">lala</prop>
                <prop key="pop">lala</prop>
                <prop key="pop">lala</prop>
            </props>
        </property>
    </bean>

import和知识点

实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载

<import resource="applicationContext-xxx.xml"/>

Spring的重点配置

<bean>标签
id属性:在容器中Bean实例的唯一标识,不允许重复
class属性:要实例化的Bean的全限定名
scope属性:Bean的作用范围,常用是Singleton(默认)和prototype
<property>标签:属性注入
name属性:属性名称
value属性:注入的普通属性值
ref属性:注入的对象引用值
<list>标签
<map>标签
<properties>标签
<constructor-arg>标签
<import>标签:导入其他的Spring的分文件

文章来源: blog.csdn.net,作者:花花叔叔,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_52077949/article/details/122792162

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。