spring-IOC和DI

 Spring是分层的javaSE以及javaEE应用于全栈轻量级开源框架,以IOC和AOP作为框架核心,提供表现层springmvc和持久层springJDBC以及业务层事务管理以及众多模块的企业应用级技术,还能整合开源世界众多的著名的第三方框架.

 本质就是创建对象和维护对象之间的关系

Spring Framework 系统架构

1.IOC

1.1:控制反转(对象创建的控制权由程序转到外部)

将对象的创建,对象的存储,对象的管理都交给spring框架处理

IOC容器负责创建对象,初始化 这些被创建的被成为 bean

1.2 :解决代码耦合性

2.DI

依赖注入就是在创建的对象的同时或者之后,对对象的属性进行赋值

3.案例

 3.1架包准备

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cyc</groupId>
    <artifactId>mavenSpring</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--准备spring的架包-->
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
    </dependencies>
</project>

3.2User类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer user_id;
    private String user_name;
    private String gender;
    private Integer age;
}

3.3配置文件

<?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:配置一个bean对象,将对象交给IOC进行管理
        id:唯一标识,不能重复
        class:设置bean对象所对应的类型-->
        <bean id="helloworld" class="com.chen.pojo.HelloWorld"></bean>
<!--        <bean id="User1" class="com.chen.pojo.User"></bean>-->
</beans>

3.4获取bean的三种方式
        /*
        * 1.根据bean的id获取
        *  2.通过类型进行获取[用的最多]
        * 注意 获取bean类型时,要求ioc容器中有且只有一个匹配类型的bean
        * 若没有一个匹配类型的bean则抛出异常NoSuchBeanDefinitionException
        * 若有多给匹配类型的bean则抛出异常 NoUniqueBeanDefinitionException
        *3.根据id和类型获取
        * 总结:根据类型获取bean时,满足bean唯一性的情况下 即通过bean的类型,bean继承的类的类型,bean实现的接口的类型都可以获取bean

 @Test
    public void test(){
        //获取ioc容器
        ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取容器中的对象 为调用对象中的方法做准备
//根据bean的id获取
//        HelloWorld helloworld = (HelloWorld) ioc.getBean("helloworld");
//        helloworld.say();
      //通过类型进行获取

        User user = ioc.getBean(User.class);
//根据id和类型获取
      //  User user = ioc.getBean("User", User.class);
        System.out.println(user);
    }

 当程序运行时,spring开始工作,会加载整个xml配合配置文件,读到<bean>,获取class属性中的类的全路径,再基于反射创建该类的对象

3.5依赖注入(IOC的具体实现)

set注入

<!--property:通过成员变量的set方法进行赋值
name:设置需要赋值的属性名(和set方法有关,get和set方法去掉get set 之后首字母小写)
value:设定指定的值
-->
        <bean id="User" class="com.chen.pojo.User">
                <property name="user_id" value="1001"></property>
                <property name="user_name" value="cyc"></property>
                <property name="gender" value="男"></property>
                <property name="age" value="20"></property>
        </bean>

构造器注入

        <bean id="User" class="com.chen.pojo.User">
<!--                当只有一个有参构造时,name可以省略-->
<!--                多个有参构造时,通过name进行指定-->
                <constructor-arg value="1001"></constructor-arg>
                <constructor-arg value="cyc"></constructor-arg>
                <constructor-arg value="男"></constructor-arg>
                <constructor-arg value="20"></constructor-arg>
        </bean>

特殊字符处理

赋值为空值

<property name="age">
        <null></null>
</property>

&lt;< 

&gt;>

<property name="gender" >
        <value><![CDATA[<男>]]></value>
</property>

CDATA当中的内容会原样解析 是xml中的特殊标签 只能写在标签中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值