Spring的核心&入门

Reference:https://tycoding.cn/2018/05/23/Spring-1/

  • Spring是一个轻量级的开源Java框架
  • Spring的优势就是分层架构
  • Spring的核心就是控制反转(IOC)和面向切面(AOP)
  • JavaEE开发分为三层结构:

    • Web层 –>SpringMVC

    • 业务层 –>Bean管理(IOC)

    • 持久层 –>Spring的JDBC模板、ORM模板用于整合其他持久层框架

Spring核心之装配Bean

Spring通过装配Bean对象来完成各个应用之间的协同合作,这也是依赖注入的本质。
而依赖注入即是我们前文提到的IOC控制反转的思想–>通过将应用对象装配进Spring Bean中,即由Spring管理对象的依赖关系。

创建Spring的配置

Spring是一个基于容器的框架,我们需要通过配置告诉Spring去加载哪些Bean和如果装配这些Bean。

  • 配置Spring的方式有两种:
    1. 在XML文件中声明Bean
    2. 通过注解配置Spring

首先以下是一个基本的Spring XML配置:

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

 在<beans>元素内,可以配置所有的Spring的配置信息。而beans不是唯一的Spring命名空间,Spring常用的命名空间有:

* aop: 为声明切面以及将@AspectJ注解的类代理为Spring切面提供了配置元素
* beans: 支持声明bean和装配bean,是Spring最基本的命名空间
* context: 为配置Spring应用上下文气功配置元素,包括自动检测和自动装配Bean、注入非Spring直接管理的对象
* jms: 为声明小气驱动的POJO提供配置元素
* mvc: 启用SpringMVC,例如面向注解的控制器、视图解析器和拦截器
* tx:提供声明式事务配置

声明一个简单的Bean

  • 创建一个HelloWorld.java类

package d20190124;

public class HelloWorld {
    private String name;

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

    public void sayHello(){
        System.out.println("hello " + name);
    }
}
  • 创建Spring的配置文件spring-config.xml ,并将HelloWorld.java交给Spring管理
<?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="hl" class="d20190124.HelloWorld">
        <property name="name" value="nihao"></property>
    </bean>

</beans>
  • 创建Main.java类
package d20190124;

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

public class Main {
    public static void main(String[] args){
        /**
        // 不使用Spring框架
        // 1.创建一个HelloWorld的实例对象
        HelloWorld hl = new HelloWorld();
        // 2. 设置实例对象的name属性
        hl.setName("nihao");
        // 3. 调用对象的sayHello()方法
        hl.sayHello();
        **/

        // 1. 创建一个Spring的IOC容器对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        // 2. 从IOC容器中获取Bean实例
        HelloWorld id = (HelloWorld) context.getBean("hl");
        // 3. 调用sayHello()方法
        id.sayHello();
    }
}

结果:

 解释:分析以上案例:我们首先创建一个JavaBean对象HelloWorld.java,然后将这个JavaBean对象交给Spring管理—>即在Spring配置文件中注入。那么,Spring是怎么实例化这个名字叫hl的Bean的呢?

  • 改进上述代码
package d20190124;

public class HelloWorld {
    private String name;

    public HelloWorld(){
        System.out.println("这是一个无参构造函数.");
    }

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

    public void sayHello(){
        System.out.println("hello " + name);
    }
}

​ 即我们手动创建一个无参构造函数,结果如下:

解释:

​ 可以看到,当我们手动创建一个无参构造函数时,定义在无参构造函数中的语句就会打印出来。原因是Spring实例化Bean采用了

HelloWorld hl = new HelloWorld();

的方式,并且会使用默认的无参构造函数进行实例化,而在Java中无参构造函数会被系统自动创建(在没有其他构造函数的情况下)。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值