1. 框架的简略了解

框架是一套第三方编写的程序,用于解决特定的问题,在应用框架进行开发时,可能并不需要关怀某些性能的实现细节,次要把握正确的应用形式,实现编程的指标

2 . Spring框架的次要作用

Spring框架次要解决了创建对象和治理对象的问题!

2.1例1:不必框架的时候创建对象

UserDao userDao = new UserDao();

2.2例2:有依赖关系时创建对象

public class UserJdbcDao {        void login() {        // 应用JDBC技术解决用户登录    }    }
public class UserLoginServlet {        public UserJdbcDao userDao = new UserJdbcDao();        public void doPost() {        // 实现用户登录的解决        userDao.login();    }    }

依赖:一个类中的办法在运行时须要另一个类的对象,则称之为“依赖”另一个类的对象!以上代码中,UserLoginServlet就是依赖UserJdbcDao的!

2.3 例3:应用接口时创建对象

public interface IUserDao {    void login();}
public class UserJdbcDao implements IUserDao {    @Override    public void login() {        // 应用JDBC技术解决用户登录    }}
public class UserJdbcDao implements IUserDao {    @Override    public void login() {        // 应用JDBC技术解决用户登录    }}
public class UserMybatisDao implements IUserDao {    @Override    public void login() {        // 应用Mybatis技术实现用户登录    }}

则在UserLoginServlet中,就能够改为应用接口来申明所须要的对象,例如,申明为:

public IUserDao userDao = new UserJdbcDao();// public IUserDao userDao = new UserMybatisDao();

2.4例3 应用工厂模式来创立类的对象

public class UserDaoFactory {    public static IUserDao newInstance() {        return new UserMybatisDao();    }}

则在各个Servlet组件中,须要应用这些对象时,只须要申明为以下语句即可

public IUserDao userDao = UserDaoFactory.newInstance();

能够看到,以上代码中齐全没有体现出UserJdbcDaoUserMybatisDao的类名,各Servlet组件中都应用以上代码来申明并获取对象即可,当类须要被替换时,只须要替换工厂类中办法的返回值即可,在各Servlet中应用到的以上代码是不须要调整的!

3.单例设计模式

单例模式(Singleton),保障一个类仅有一个实例,并提供一个拜访它的全局拜访点。

    单例模式有很多益处,比方可节约零碎内存空间,管制资源的应用。

3.1 饿汉式

    package cn.tedu.thread;        //设计模式        public class Test4_Design {            public static void main(String[] args) {                MySingleTon m = MySingleTon.getMy() ;                MySingleTon m2 = MySingleTon.getMy() ;                //==比拟根本类型的值,比的是值自身 1==2                //==比拟援用类型的值,比的是地址值                //equals()到底比啥?                    // -- 如果不重写,应用Object提供的equals(),就是 == 比的,比对象间的地址值                    // -- 如果重写了equals() , 比对象间的属性值                System.out.println(m == m2) ;                //true --实现了单例,两次getMy()调用返回了同一个对象            }        }        class MySingleTon {            //1,私有化构造方法            private MySingleTon(){ }            //2,本人创建对象            //加static是因为--动态资源getMy(),关联的资源必须也得是动态的--动态只能调用动态            static private MySingleTon my = new MySingleTon() ;            //3,设置全局拜访点            //加static是因为--无奈通过对象拜访getMy(),只能通过类名.调用了            static public MySingleTon getMy(){                return my ;//把 my 返回给调用地位            }        }

3.2 懒汉式

package cn.tedu.thread;        //设计模式        //总结        //1,单例设计模式,是一套通过经验总结的开发过程.            /*                --私有化构造方法                --在类的外部创立好对象                --提供公共的全局拜访点             */        //2,有两种实现办法,饿汉式  懒汉式.        //3,饿汉式更方便使用(SSM框架也采纳这种办法) , 懒汉式才是面试重点        public class Test4_Design {            public static void main(String[] args) {                MySingleTon m = MySingleTon.getMy() ;                MySingleTon m2 = MySingleTon.getMy() ;                //==比拟根本类型的值,比的是值自身 1==2                //==比拟援用类型的值,比的是地址值                //equals()到底比啥?                    // -- 如果不重写,应用Object提供的equals(),就是 == 比的,比对象间的地址值                    // -- 如果重写了equals() , 比对象间的属性值                System.out.println(m == m2) ;                //true --实现了单例,两次getMy()调用返回了同一个对象                Runtime r = Runtime.getRuntime();                Runtime r2 = Runtime.getRuntime();                System.out.println(r==r2);            }        }

//懒汉式 ----- 面试的重点!!!

    //提早加载,什么时候须要什么时候才会加载    //线程平安的隐患 --共享资源my ,被多条语句操作 --加锁就义效率然而保障平安

4 单例模式注解

//@Scope("prototype")//prototype示意多例作用域,此类实例与Lazy无关,默认何时须要何时创立,并且不会存储到spring的对象池//@Scope //@Scope注解用于定义对象作用域,默认为单例(Singleton)作用域(一个JVM内存中名字雷同的Bean只能有一个-Key雷同的Bean)//@Lazy //形容的类的对象能够提早其创立,何时须要何时创立(按需加载)@Componentpublic class ObjectPool {    public ObjectPool(){        System.out.println("ObjectPool()");    }    @PostConstruct    public void init(){        System.out.println("init()");    }    @PreDestroy    public void destroy(){        System.out.println("destroy()");    }}