Maven创建web项目,Spring-Ioc

一.Maven常见命令

  • clean
    • mvn clean:清理(删除)编译的文件
    • 使用插件:
      • maven-clean-plugin:2.5:clean
  • compile
    • mvn compile:编译主目录的文件
    • 使用插件:
      • maven-resources-plugin:2.6:resources
      • maven-compiler-plugin:3.1:compile
  • test
    • mvn test: 编译并运行test目录的代码
    • 使用插件:
      • maven-resources-plugin:2.6:resources
      • maven-compiler-plugin:3.1:compile
      • maven-resources-plugin:2.6:testResources
      • maven-compiler-plugin:3.1:testCompile
      • maven-surefire-plugin:2.12.4:test
  • package
    • mvn package:打包项目,jar包或war包
    • 使用插件:
      • maven-resources-plugin:2.6:resources
      • maven-compiler-plugin:3.1:compile
      • maven-resources-plugin:2.6:testResources
      • maven-compiler-plugin:3.1:testCompile
      • maven-surefire-plugin:2.12.4:test
      • maven-jar-plugin:2.4:jar
  • install
    • mvn install:安装到仓库
    • 使用插件 :
      • maven-resources-plugin:2.6:resources
      • maven-compiler-plugin:3.1:compile
      • maven-resources-plugin:2.6:testResources
      • maven-compiler-plugin:3.1:testCompile
      • maven-surefire-plugin:2.12.4:test
      • maven-jar-plugin:2.4:jar
      • maven-install-plugin:2.4:install
  • 其他命令
    • mvn deploy:部署,部署到私服
    • mvn tomcat:run:运行

二.Maven依赖

  • 依赖范围:
    • A 依赖B,需要再A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:
      • compile:编译范围, 编译范围的依赖会在编译,测试,运行,打包(war)都会使用依赖jar包
      • provided:提供依赖,provided依赖在编译,测试时需要,运行,打包都不会包含。
      • runtime:运行依赖,runtime依赖在运行、测试、打包的需要,但在编译的时候不需要,比如:jdbc的驱动包
      • test:测试依赖,在编译和运行时不需要,他们只有在测试编译和测试运行时使用, 比如junit,也不会被打包
      • system:系统依赖,system依赖与provided类似,但是你必须显示的提供一个对于本地系统中jar文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。
图片0.jpg
  • 注意:
    • 打包jar包时,不会包含任何依赖包的。
    • 默认依赖范围:compile
    • 依赖范围由强到弱的顺序是:compile-->provided-->runtime-->test

三.创建Maven的web项目

1.ideal创建web项目

  • 先创建java项目->在pom.xml文件中添加打包格式的代码(war格式)

    war  
    
  • src.main包下创建webapp包->在webapp下创建WEB-INF包->在WEB-INF下创建web.xml的配置文件(可直接在其他web项目下复制一份)->在webapp包下创建一个主页面index.html

图片1.jpg
  • 在pom.xml中添加maven和Tomcat插件
    
        
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.6.1
                
                    1.8
                    1.8
                
            

            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2
                
                    /
                    8080
                
            
        
    
  • 双击tomcat7:run运行
    • 会出现index.html页面中的内容
图片2.jpg

2.eclipse创建web项目

  • 创建maven项目,打包格式选择war
图片3.jpg
  • 在src.main.webapp下创建WEB-INF包->在WEB-INF下创建web.xml配置文件(可在其他项目下直接复制)
  • 在webapp包下创建index.html的主页面
图片4.jpg
  • 在pom.xml中添加maven和Tomcat插件

        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.6.1
                
                    1.8
                    1.8
                
            

            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2
                
                    /
                    8080
                
            
        
    
  • 更新maven项目(alt+F5)
图片5.jpg
  • 运行
    • Run as ->Maven build->tomcat7:run
图片6.jpg

四.Spring-IoC

1.Spring的好处

  • 方便解耦,简化开发:Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 Spring 管理

  • AOP(Aspect Oriented Programming:即面向切面编程) 编程的支持:Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

  • 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程

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

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

  • 降低 JavaEE API 的使用难度:Spring对 JavaEE

  • Ioc : 控制反转

    • IOC是 Inverse of Control 的简写,意思是控制反转。是降低对象之间的耦合关系的设计思想。
    • 通过IOC,开发人员不需要关心对象的创建过程,交给Spring容器完成。具体的过程是,程序读取Spring 配置文件,获取需要创建的 bean 对象,通过反射机制创建对象的实例。
    • 缺点:
      • 对象是通过反射机制实例化出来的,因此对系统的性能有一定的影响。
  • DI-依赖注入

    • Dependency Injection,说的是创建对象实例时,同时为这个对象注入它所依赖的属性。相当于把每个bean与bean之间的关系交给容器管理。而这个容器就是spring。
    • 例如我们通常在 Service 层注入它所依赖的 Dao 层的实例;在 Controller层注入 Service层的实例。
  • 依赖注入(DI)和控制反转(IoC)是从不同的角度描述的同一件事情,就是指通过引入IoC容器,利用依赖关系注入的方式,实现对象之间的解耦.

2.scope的属性

  • singleton (默认属性)

  • Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引用返回给调用者,spring IOC继续对这些Bean进行后续的生命管理。BeanFactory只管理一个共享的实例。所有对这个特定bean的实例请求,都导致返回这个唯一bean实例的引用。即每次拿到的对象都是引用的同一个地址的对象。当一个bean被标识为singleton时候,spring的IOC容器中只会存在一个该bean。

  • 2.prototype (多例的)

    • Spring将Bean返回给调用者,调用者负责Bean后续生命的管理,Spring不再管理这些Bean的生命周期。
      每次对这个bean的实例请求都会导致一个新的实例的创建。当用户需要不受其他用户对象影响的对象或有类似的需求时,用这个比较好。
    • 即每次拿到的对象都是引用的不同地址的对象。相当于一个new的操作。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责
  • request

    • ‍request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
  • session

    • ‍session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效

3.小结

  • < property>标签赋值的时候,一定要有无参构造器(此时定义了有参构造的话,默认的无参构造就没了,也要加上)
  • spring默认生成的对象时单例模式
  • scope在web项目下默认有四个属性值
    • request , session , singleton(单例) , prototype(多例)
  • scope在java项目下只有两个属性值
    • singleton(单例) , prototype(多例)
  • 如果使用有参构造赋值的话就把< property>标签改为< constructor-arg>标签
  • < property>标签和< constructor-arg>标签也可以混合使用(就是在运行时时候,先调用< constructor-arg>的有参构造,再调用< property>中的属性内容)
  • 有参构造赋值的方式一共有四种
    • name + value
    • index + value
      • 根据索引赋值,从0开始
    • type + value
      • 使用type的时候,相同数据类型也是需要确定顺序位置的,不然传的值位置不正确
    • value
      • 要确定构造参数的顺序,不然传的值位置不正确
  • 把一个对象赋值进去的话,需要向创建出来这个对象,得到一个id属性值,然后通过ref="id属性值",赋值进去

五.Spring-IoC的简单例题

创建⼀个学⽣类,⾥⾯有如下属性:
1. ⽣⽇BirthDays类⾥⾯的属性有year int, month int, day int
2. Student 类:sid int, name String, sex boolean, score double, tel String,BirthDay birth
3. 使⽤⽆参构造器和property给对象赋值
4. 使⽤带参构造器给对象赋值(四种⽅式都均使⽤)
5. 使⽤namespace命名空间p给对象学⽣赋值
  • 创建Student 类
public class Student {
    private int sid;
    private String name;
    private boolean sex;
    private double score;
    private String tel;
    private BirthDays birth;

    public Student() {
    }

    public Student(int sid, String name, boolean sex, double score, String tel, BirthDays birth) {
        this.sid = sid;
        this.name = name;
        this.sex = sex;
        this.score = score;
        this.tel = tel;
        this.birth = birth;
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

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

    public boolean isSex() {
        return sex;
    }

    public void setSex(boolean sex) {
        this.sex = sex;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public BirthDays getBirth() {
        return birth;
    }

    public void setBirth(BirthDays birth) {
        this.birth = birth;
    }

    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("Student{");
        sb.append("sid=").append(sid);
        sb.append(", name='").append(name).append('\'');
        sb.append(", sex=").append(sex ? "男":"女");
        sb.append(", score=").append(score);
        sb.append(", tel='").append(tel).append('\'');
        sb.append(", birth=").append(birth);
        sb.append('}');
        return sb.toString();
    }
}
  • 创建BirthDays类
public class BirthDays {
    private int year;
    private int month;
    private int day;

    public BirthDays() {
    }

    public BirthDays(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("BirthDays{");
        sb.append("year=").append(year);
        sb.append(", month=").append(month);
        sb.append(", day=").append(day);
        sb.append('}');
        return sb.toString();
    }
}
  • 在resources下创建Spring config文件
    • Student.xml : 验证有无参构造方法的
    • student1.xml : 使⽤namespace命名空间p给对象学⽣赋值
图片7.jpg




    
    
        
        
        
    
    
        
        
        
        
        
          
    

    
    
        
        
        
    
    
        
        
        
        
        
        
    

    
    
        
        
        
    
    
        
        
        
        
        
        
    

    
    
        
        
        
    
    
        
        
        
        
        
        
    

    
    
        
        
        
    
    
        
        
        
        
        
        
    





       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    
    
    


  • 在test.java.com.mvn下新建测试类
    • StudentTest.java : 测试验证有无参数构造赋值
    • Student1.java : 测试使⽤namespace命名空间p给对象学⽣赋值
public class Student1 {
    @Test
    public void student1(){

        ApplicationContext ac=new ClassPathXmlApplicationContext("student1.xml");

        System.out.println(ac.getBean("birth"));
        System.out.println(ac.getBean("stu"));
    }
}


public class StudentTest {
    @Test
    public void studentTest(){
        ApplicationContext ac=new ClassPathXmlApplicationContext("student.xml");
        //无参构造器
        System.out.println(ac.getBean("birth1"));
        System.out.println(ac.getBean("stu1"));

        //有参构造器name+value
        System.out.println(ac.getBean("birth2"));
        System.out.println(ac.getBean("stu2"));

        //有参构造器index+value
        System.out.println(ac.getBean("birth3"));
        System.out.println(ac.getBean("stu3"));

        //有参构造器type+value
        System.out.println(ac.getBean("birth4"));
        System.out.println(ac.getBean("stu4"));

        //有参构造器type+value
        System.out.println(ac.getBean("birth5"));
        System.out.println(ac.getBean("stu5"));
    }
}

你可能感兴趣的:(Maven创建web项目,Spring-Ioc)