SpringIOC基础总结

导入依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.21</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
    <scope>provided</scope>
</dependency>
实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private String sex;
    private Integer age;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class People {
    private String name;
    private String sex;
    private Properties properties;
    private List<String> hobbies;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Work {
    private String station;
    private double salary;
    private Map<String, People> peoples;
}
public class UserDao {
    public void save(){
        System.out.println("Success");
    };
}
public class UserServiceImpl implements UserService {
    private UserDao dao;
    public UserServiceImpl() {
    }
    public UserServiceImpl(UserDao funDao) {
        this.dao = funDao;
    }
//    //set方法注入
//    public void setUserDao(UserDao dao) {
//        this.dao = dao;
//    }

    @Override
    public void init() {
        System.out.println("初始化方法");
    }
    @Override
    public void save() {
        dao.save();
    }
    @Override
    public void destroy() {
        System.out.println("销毁方法");
    }
}
配置文件内容 text.properties
msg=HelloWorld
day=2022.8.22

xml配置文件内容

<!--读配置文件 读取text.properties的内容-->
<bean id="propertiesMsg" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath*:text.properties</value>
        </list>
    </property>
</bean>
在容器中生成People实体,id是唯一标识class是实体的路径
<bean id="p" class="com.init.model.People">
    property是对类属性的设置,value是表示基础类型的值设定
    <property name="name" value="卡沙"/>
    <property name="sex" value="女"/>
    list是对集合的赋值
    <property name="hobbies">
        <list>
            <value>打游戏</value>
            <value>听歌</value>
            <value>跑步</value>
        </list>
    </property>
    properties是引用类型,数据格式是a=1,所以设置时格式如下
    <property name="properties">
        <props>
            ${day}读取配置文件后采用这个格式获取值,day是key
            <prop key="msg">${day}</prop>
        </props>
    </property>
</bean>
<bean id="p2" class="com.init.model.People">
    <property name="name" value="卡沙"/>
    <property name="sex" value="女"/>
    <property name="hobbies">
        <list>
            <value>看定影</value>
            <value>听歌</value>
            <value>打篮球</value>
        </list>
    </property>
    <property name="properties">
        <props>
            <prop key="msg">${msg}</prop>
        </props>
    </property>
</bean>
<bean id="worker" class="com.init.model.Work">
    <property name="salary" value="#{3661.55}"/>
    <property name="station" value="前端"/>
    <property name="peoples">
        因为map是引用类型
        <map>
             且泛型规定了值必须是People类型数据,这里使用得ref因为People是引用类型数据
            <entry key="p1" value-ref="p"/>
            <entry key="p2" value-ref="p2"/>
        </map>
    </property>
</bean>
测试
@org.junit.Test
public void testWorker(){
    ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
    Work work = (Work) context.getBean("worker");
    System.out.println(work);
}

接下来是当一个中属性是引用类型的案例

<!--有参构造方法注入--> <bean id="userDao" class="com.init.dao.UserDao"/> <bean id="userService" class="com.init.service.impl.UserServiceImpl"> <constructor-arg name="funDao" ref="userDao"/> </bean>
<!--set方法注入--> <bean id="userDao" class="com.init.dao.UserDao"></bean> <bean id="userService" class="com.init.service.impl.UserServiceImpl"> <!--name的值:set方法的后半截,首字母小写--> <property name="userDao" ref="userDao"/> </bean>

这两个的区别一个利用set方法给属性赋值,一个是利用构造方法赋值区别不大.看个人喜欢,这个ioc思想其实归根就是反射,由容器跟我们创建对象,不在像以前那样什么对象都需要自己去new,我们现在只需做的就是写bean标签然后给属性赋值.其中创建bean时候可以跟一些属性比如 <bean id="userService" class="com.init.service.impl.UserServiceImpl" scope="singleton" init-method="init" destroy-method="destroy"/>

scope="singleton"代表是创建一个单例对象,默认.可以设置的值有prototype、request、session、global session。session和global session类型只实用于 web程序,通常是和XmlWebApplicationContext共同使用。prototype和单例相反。init-method和destroy-method是自动调用的方法你可以加入一些自己想要的设置,这个方法必须要有我的UserServiceImpl里有是有的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值