依赖注入和控制反转

来源:互联网 发布:韩国东大门代购淘宝店 编辑:程序博客网 时间:2024/06/16 17:42
2.IOC /DI
答案:
        ①:根据上面的讲述,应该能看出来,依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
 ②:小结一下:
        其实IoC/DI对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了。         这么小小的一个改变其实是编程思想的一个大进步,这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
3.spring是单例模式吗?
答案:
①spring的controller默认是单例模式。
1.为了性能,单例不用每次都new,当然快了。
2.不需要多例。
②:改为多例的(就是在class上面加一个@Scope("request")。
从此可见,单例是不安全的,会导致属性重复使用。
③:最佳实践:
1、不要在controller中定义成员变量。
2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式。


4.static关键字
答案:①static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
②:
一句话来描述就是:
 方便在没有创建对象的情况下来进行调用(方法/变量)。很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。

在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
④static变量:
 static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
⑤在Java中切记:static是不允许用来修饰局部变量。
5.string可以被继承,重写吗?
答案:①
String是final类,不能被继承;
子类中定义和父类中相同的方法,子类则重写了父类的方法,调用子类的该方法时是执行子类的实现,否则是执行父类的实现。
② 
如果某个方法在定义时,前面有修饰词final,该方法可以被调用,不能重写
6.spring线程安全关键字:Scope
7.java设计模式:单例模式,懒汉式,饿汉式
8.Stringbuilder和Stringbuffer
9.final关键字
答案:final 放在类前面
如果某个类在定义时,前面有修饰词final,则该类不能被继承
final 放在属性前面
属性声明时,如果前面有修饰词final关键字,则该属性值不能被更改,即此时该属性为常量
final放在方法前面
如果某个方法在定义时,前面有修饰词final,该方法可以被调用,不能重写。
10.框架:Spring Boot框架
11.sleep和wait的区别
答案:
11.它们最大本质的区别是:sleep()不释放同步锁,wait()释放同步锁.
还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;wait()可以用notify()直接唤起.


sleep和wait的区别还有:
1。这两个方法来自不同的类分别是Thread和Object
2。最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3。wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4。sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
0 0
原创粉丝点击