spring对象配置 和 idea中maven配置

什么是spring

开源的框架,框架就是半成品的产品,就像我们建楼,建房一样,每一个部分组成了一个统一的结构,spring引入控制反转,简化企业开发,高复用性和移植性

控制反转

应用本身不负债依赖对象类的创建和维护,依赖对象的创建和维护是由外部容器负责的。控制权由应用移动到外部容器,也就叫依赖注入,是控制反转的重要部分,在程序运行当中动态的实现依赖注入,减少程序的耦合程度

耦合:代码书写过程中所使用技术的结合紧密度

内聚:代码书写过程中单个模块内部组成部分间的联系

重要特性

IOC   把外部想用的对象交给外部去处理,是一个容器,也就是下面写在标签里面的

AOP  面向切面编程,在不改变目标原有代码的前提下新增功能,起到无嵌入解耦的功能

maven管理jar包文件

什么是maven,管理jar包,解决版本冲突的一个jar仓库

使用,网上下载apache-maven,本地配置maven仓库

中央仓库,全球性的仓库,但是速度太慢,所以我们一般在阿里巴巴的镜像云下载jar包,在conf文件夹里面的settings.xml文件找到这行,配置仓库的目录,53行的那句话拿出来改成本地路径

spring对象配置 和 idea中maven配置_第1张图片

  配置文件的路径和系统的路径的斜杠是相反的

 配置阿里云的地址,网上找复制就行了152行

spring对象配置 和 idea中maven配置_第2张图片

    
      central    
      central                                                                                                                           
      http://maven.aliyun.com/nexus/content/groups/public   
      central    
     

创建一个maven项目

spring对象配置 和 idea中maven配置_第3张图片

 通过选择第一个红色圈的地方创建一个java项目

spring对象配置 和 idea中maven配置_第4张图片

 第二个红色圈配置的是web项目,接下来配置好组id

spring对象配置 和 idea中maven配置_第5张图片

 同理idea也要配置好maven的环境,找到maven目录下conf下的setting.xml文件配置好就行了

spring对象配置 和 idea中maven配置_第6张图片

 修改编译器依赖

spring对象配置 和 idea中maven配置_第7张图片

 maven重载

spring对象配置 和 idea中maven配置_第8张图片

 maven依赖管理网站mvnrepository,搜索spring

spring对象配置 和 idea中maven配置_第9张图片

 用这个spring web mvc,之后继续点击所选版本

spring对象配置 和 idea中maven配置_第10张图片

spring对象配置 和 idea中maven配置_第11张图片

 最后复制这个依赖到pom.xml文件里面

spring对象配置 和 idea中maven配置_第12张图片

 找到dependencies这个标签,往里面进行复制

spring对象配置 和 idea中maven配置_第13张图片

 同样再进行重载就行了

刚才网站下载下来的jar包存在这个文件里面

 spring对象配置 和 idea中maven配置_第14张图片

创建一个resources文件

spring对象配置 和 idea中maven配置_第15张图片

 在resources文件夹下面增加applicationContext.xml配置文件模板,容器对象,创建对象保存在这里

spring对象配置 和 idea中maven配置_第16张图片



在xml文件里面进行对象的配置

spring对象配置 和 idea中maven配置_第17张图片

 以后会在这里面配置成千上万的bean,注意这些内容要放在 标签里面,默认是单例模式

package com.test;

import com.entor.entity.User;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

    public static void main(String[] args) {

/**
*@describe  不使用spirng框架对象的使用
**/
        User user = new User();


        user.setId(1);

        user.setName("zhangsan");
/**
*@describe  通过使用spring框架对象的使用
 * 加载spring配置文件,并且默认创建对象
**/

        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("/applicationContext.xml");
        /**
        *@describe  通过xml里面的id来获取对象
        **/

        User user1 = (User) classPathXmlApplicationContext.getBean("user");

        System.out.println(user1);

/**
*@describe  从xml里面通过反射拿到这个对象
**/
        User bean = classPathXmlApplicationContext.getBean(User.class);

        System.out.println(bean);
/**
*@describe  单例模式,唯一实例
**/
        System.out.println(user1==bean);//true

    }

}

 可以通过这个属性配置其他模式

spring对象配置 和 idea中maven配置_第18张图片

 加载配置文件时不创建对象,懒加载,用的时候才创建

    

指定对象创建的时候初始化的方法,只会被执行一次,同样也有对象销毁的方法

    

执行了这个user这个实体类里面的这两个指定方法

 public void init(){
        System.out.println("对象创建");
    }

    public void destory(){
        System.out.println("对象销毁");
    }

嵌套实体类

spring对象配置 和 idea中maven配置_第19张图片

 循环嵌套

  
      

      

  
    

        
        

        
        
    

实体类

package com.entor.entity;

public class Bean1 {

    private  Bean2 bean2;

    private Bean3 bean3;

    public Bean1() {

    }

    public Bean2 getBean2() {
        return bean2;
    }

    public void setBean1(Bean2 bean2) {
        this.bean2 = bean2;
    }

    public Bean3 getBean3() {
        return bean3;
    }

    public void setBean3(Bean3 bean3) {
        this.bean3 = bean3;
    }

    @Override
    public String toString() {
        return "Bean1{" +
                "bean1=" + bean2 +
                ", bean3=" + bean3 +
                '}';
    }
}

通过ref属性引用其他类型对象

实时当注入的类太多的时候,这个时候通常使用注解的方式进行注入

/**
*@describe 注释在属性上面,作用,根据属性名称去配置文件中获取对应id(d属性是bean
 *  唯一标识,用来获取bean类的对象,class属性是类的全限定名)名称的bean对象,找到后赋值给该属性
 *  如果没有找到这会根据属性类型去文件当中找
**/
  @Resource

使用注解后可以省略属性的get和set方法

@Resource
    private  Bean2 bean2;
@Resource
    private Bean3 bean3;

同时还要在xml文件当中开启注解模式

通过注解配置xml


    
    
    

如果有多个重复的id编译器会报id是重复的错误

同样的还有另一个注释

 /*
 * @Autowired 注解在属性上面,作用根据属性类型去配置文件查找对象,
如果找到多个,再根据属性名称去查找,如果找不到则报错
 * 配合使用@Qualifier注解使用,指定名称去查找,如果找不到则报错,
不会再根据属性名称去找
**/

  @Autowired
  @Qualifier("bean2")
    private  Bean2 bean2;

虽然设定规则去查询类,但是配置文件里面的类仍然会越来越多,不利于维护,能不能把xml当中的实体类去掉呢,可以,在实体类上面进行注解,上面这三个注解是定义查找bean的规则

/**
*@describe 此注解多用在类上,作用:相当于配置文件中一个bean标签,
相当于配置文件里面的bean标签,默认的id属性名称
 * 是名该类名的首字母小写格式,也可以指定名称
**/
@Component("bean1")

加上去之后还不行,配置文件还不知道去哪找这些注解,在配置文件里面加上


    
/**
 *  @Component  标签下面三个以外的组件
 *
 * @Controller 标识处理客户端请求类
 *
 * @Service 注解标识业务处理类
 *
 * @Repository 标识数据访问层处理业务类
 *
 * 区分不同对象,前台,业务,仓管
**/

上面4种注解是创建bean的注解

如果没有通过注解的方式获取对象,那么你创建的内存空间和spring创建对象的内存空间不是相同的,那么导致你对象里面如果使用注解的方式查找对象没有被spring查找并赋值,会报空指针异常,就像链表,中间一环掉了就没有了

你可能感兴趣的:(spring)