Java mac idea spring的使用01

1.什么是spring

简单来说,Spring 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级 开源框架。

2.spring的作用

2.1 方便解耦,简化开发

Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 Spring 管理

2.2 AOP 编程的支持

Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

2.3 声明式事务的支持

只需要通过配置就可以完成对事务的管理,而无需手动编程

2.4 方便程序的测试

Spring 对 Junit4 支持,可以通过注解方便的测试 Spring 程序

2.5 方便集成各种优秀框架

Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz 等)的直接支持

2.6 降低 JavaEE API 的使用难度

Spring 对 JavaEE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等),都提供了封装,使这些 API 应用难度大大降低

3.spring的使用

3.1 导包

如果是之前使用eclipse进行开发的同学,使用idea应该会觉得非常爽,非常方便。首先创建工程的时候,只需要勾选上需要依赖的框架,那么idea就会为你下载最新的jar包,不用你再进行手动的导包了。


Snip20180727_3.png

3.2 配置spring

先看目录结构
Snip20180727_4.png

1.创建User类

public class User {
    String name;
    Integer age;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

2.书写配置文件
2.1 配置文件默认放到src路径下(无强制规定,程序员都放src下),文件名applicationContext.xml(无强制规定,程序员都这么起),自己看着办好伐。

2.2 这里,在idea下,直接就可以进行配置文件的书写,无需像在eclipse里面一样,还要引入约束,相信用过eclipse的同学会有感触。

这里直接将三种创建方式都放上来了,我们只介绍创建方式1,方式2和3并不常用,不详细介绍了。




    

    
    
    


    
    


    
    

    


4.测试


public class Test01 {

    @Test
    public void testFunc() {
        // 使用spring来创建对象
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 通过 applicationContext 获取对象
        User user = (User) applicationContext.getBean("user");
        User user2 = (User) applicationContext.getBean("user");

        System.out.println(user);
        System.out.println(user == user2);
    }
}

5. 方式2和方式3作为了解

public class UserFactory {

    public static User createUser(){

        System.out.println("静态工厂创建User");

        return new User();

    }

    public  User createUser2(){

        System.out.println("实例工厂创建User");

        return new User();

    }
}

public class Test01 {

    @Test
    public void testFunc() {
        // 使用spring来创建对象
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 通过 applicationContext 获取对象
        User user2 = (User) applicationContext.getBean("user2");
        User user3 = (User) applicationContext.getBean("user3");

        System.out.println(user2);
        System.out.println(user3);
    }
}

4. 生命周期

41. 配置

 
    

42. 在user中实现方法

public void init() {
        System.out.println("初始化方法调用");
    }

    public void destroy() {
        System.out.println("销毁方法调用");
    }

43. 测试

@Test
    public void testFun2() {
        // 使用spring来创建对象
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 通过 applicationContext 获取对象
        User user = (User) applicationContext.getBean("user");
        System.out.println(user);

        applicationContext.close();
    }
初始化方法调用
bean.User@4f063c0a

Jul 30, 2018 10:38:56 AM org.springframework.context.support.ClassPathXmlApplicationContext doClose
销毁方法调用
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@4fccd51b: startup date [Mon Jul 30 10:38:56 CST 2018]; root of context hierarchy

Process finished with exit code 0

5.模块化配置

可以通过引入其他的配置文件,用不同的配置文件专门配置某些类


Snip20180730_10.png

6. 属性注入

6.1 set方法注入

1.创建dog类

public class Dog {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  1. 在User中添加Dog类型的属性
public class User {
    private String name;
    private Integer age;
    private Dog dog;

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }
  1. 书写配置文件


    Snip20180730_9.png

4.打印结果


Snip20180730_12.png

6.2 构造方法注入

1.在User中添加构造方法

public User(String name, Dog dog) {
        this.name = name;
        this.dog = dog;
    }

2.书写配置文件


    
        
        
    


    
        
        
    

添加:index指定构造参数顺序:
如果User中有两个构造方法,并且属性相同,只是顺序不同

public User(String name, Dog dog) {
        this.name = name;
        this.dog = dog;
    }

    public User(Dog dog,String name) {
        this.name = name;
        this.dog = dog;
    }

这时候需要在配置文件中,通过index指定参数的顺序


    
    
        
        
    


    
        
        
    

添加:type指定构造参数的参数类型:
如果User中有两个构造方法,参数名相同,只是类型不同

public User(String name, Dog dog) {
        this.name = name;
        this.dog = dog;
    }

    public User(Integer name, Dog dog) {
        this.name = name + "";
        this.dog = dog;
    }

这时候需要通过在配置文件中,指定参数的类型

 
    
    
    
    
    
        
        
    


    
        
        
    

6.3 p名称空间注入

1.在配置文件中导入p名称空间



2.书写要配置的对象

    
    

6.4 spel表达式注入


        
        
        

        
        
    

7.复杂类型注入

先创建一个类,包含各种array、list、map

public class CollectionBean {
    private Object[] arr;
    private List list;
    private Map map;

    public Object[] getArr() {
        return arr;
    }

    public void setArr(Object[] arr) {
        this.arr = arr;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public Map getMap() {
        return map;
    }

    public void setMap(Map map) {
        this.map = map;
    }

    @Override
    public String toString() {
        return "CollectionBean{" +
                "arr=" + Arrays.toString(arr) +
                ", list=" + list +
                ", map=" + map +
                '}';
    }

7.1 array数组注入

1.单个元素注入



        
        

    

2.多个元素注入


        
        
        
        
        旺财1号
        旺财2号
        
        
        
    

7.2 list注入

和array注入类似
1.单个元素注入



        
        

    

2.多个元素注入


        

        
            
                tom1
                tom2
                
            
        
    

7.3 map注入


        
            
                
                
                
            
        
    

7.4 properties注入


        
            
                com.jdbc.mysql.Driver
                root
                123456
            
        
    

8. 设置spring生命周期,绑定到Application域

8.1 配置spring


    
        org.springframework.web.context.ContextLoaderListener
    

    
    
        contextConfigLocation
        classpath:applicationContext.xml
    

8.2 从servletContext中获取applicationContext容器

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.apache.struts2.ServletActionContext;
import javax.servlet.ServletContext;



public class Test01 {

    @Test
    public void testFunc1() {

        ServletContext servletContext = ServletActionContext.getServletContext();
        WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
        User user = (User) webApplicationContext.getBean("user");
    }

}

你可能感兴趣的:(Java mac idea spring的使用01)