获取Class对象的三种方式
- Class.forName(“全类名”)。多用于配置文件,将类名定义在配置文件中。
- 类名.class。多用于参数的传递。
- 对象.getClass()。多用于对象的获取字节码的方式。
IOC底层实现原理
IOC 控制反转,是一种设计思想,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方。他是通过反射机制+工厂模式是实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在map种的类属性注入到类中
DI——Dependency Injection,即依赖注入 由容器动态的将某个依赖关系注入到组件之中。
AOP 底层实现原理
面向切面编程,利用一种称为“横切”的技术,剖解开封装的对象内部。将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,实现AOP的技术,主要分为两大类:一是采用动态代理技术,spring默认使用jdk动态代理,如果目标类不是接口选择cglib动态代理,二是采用静态织入的方式。
SpringBoot好处有哪些?
- 用来简化spring初始搭建和开发过程使用特定的方式进行配置(properties或者yml文件)
- 创建独立的spring引用程序main方法运行
- 嵌入Tomcat无需部署war包,直接打成jar包nohup java -jar -& 启动就好
- 简化了maven的配置
- 自动配置spring添加对应的starter自动化配置
SpringBoot常用的starter:
- spring-boot-starter-web(嵌入Tomcat和web开发需要的servlet和jsp支持)
- spring -boot-starter-data-jpa(数据库支持)
- spring-boot-starter-data-redis(redis支持)
- spring-boot-starter-data-solr (solr搜索应用框架支持)
sleep() 和wait() 有什么区别?
sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep 不会释放对象锁。wait 是Object 类的方法,对此对象调用wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
请说出你所知道的线程同步的方法。
答:线程同步的方法:. (1)wait ():使一个线程处于等待状态,并且释放所持有的对象的lock。. (2)sleep ():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉 InterruptedException异常。. (3)notify ():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的 唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。. (4)notityAll ():唤醒所有处于等待状态的线程,注意并不是给所有唤醒线程一个对象的锁, 而是让它们竞争。.
关键字:JDK,JRE,JVM
摘要:JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,
在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。
1.三者联系:
JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。
在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是 jvm工作所需要的类库,
而jvm和 lib和起来就称为jre。JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API) 开发了属于我们自己的JAVA程序后,
通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些 JAVA字节码,JVM解析这些字节码,
映射到CPU指令集或OS的系统调用。
2.三者区别:
a.JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来 将java文件编译成class文件的,
这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等 用于开发的可执行指令文件。
这也证实了一个是开发环境,一个是运行环境。
b.JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
java中this和super的用法区别
this 是自身的一个对象,代表对象本身,用法大致分为以下3类:
1、普通的直接引用当前对象本身
2、形参和成员名重名,用this来区分
3、引用构造方法 ,this(参数) ,应该为构造函数中的第一条语句,调用的事1本类中另外一种形式的构造方法。
super 可以理解为是指向自己超(父)类对象,这个超类指的是离自己最近的一个父类。也大致 分为3种用法
1、普通的直接引用,与this类似,只不过它是父类对象,可以通过它调用父类成员。
2、子类中的成员变量或方法与父类中的成员变量或方法同名,可以使用super区分。
3、引用构造方法,super(参数):调用父类中的某一个构造方法(应该为构造方法中的第一 条语句)。
spring常用注解分析
@Resource和@Autowired区别
@Resource 注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通 过 @Resource 的使用来消除 set ,get方法。 @Autowired功能和注解 @Resource 一样,可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。只不过注解@Resource 是按照名称来进行装配,而@Autowired 则是按照类型来进行装配。(它首先会根据类型去匹配,多个则按名称,空则会抛出异常。法二:@Autowired 和 @Qualifier(“名称”) 配合使用)
@Qualifier:将@Qualifier注解和@Autowire注解结合使用,指定需要装配的确切的bean。
1、@controller: controller控制器层(注入服务)
2、@service : service服务层(注入dao)
3、@repository : dao持久层(实现dao访问)
4、@component: 标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
@Required:表明bean的属性必须在配置的时候设置.
@Configuration 声明当前类是一个配置类 @Configuation等价于
@Bean 注解的方法将会实例化、配置和初始化一个新对象,这个对象将由 Spring的 IoC 容器来管理, 作用与 元素类似
Spring MVC的常用注解解释
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数
@RequestMapping(value="/product/{productId}",method = RequestMethod.GET)
public String getProduct(@PathVariable(“productId”) String productId)
@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用;
在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。例如,异步获取 json 数据,加上 @Responsebody 注解后,就会直接返回 json 数据。
@RequestParam 在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter(“name”),另外一种是用注解@RequestParam直接获取。这里主要讲这个注解 。 spring会自动根据参数名字封装进入,我们可以直接拿这个参数名来用
Controller, RestController的共同点
都是用来表示Spring某个类的是否可以接收HTTP请求。
Controller, RestController的不同点
@Controller:标识一个Spring类是Spring MVC controller处理器,@RestController:@RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作用。@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。
元注解
用来描述注解的注解,就5个:
@Target 注解用在哪里:类上、方法上、属性上等等
@Retention 注解的生命周期:源文件中、字节码文件中、运行中
@Inherited 允许子注解继承
@Documented 生成javadoc时会包含注解,不常用
@Repeatable注解为可重复类型注解,可以在同一个地方多次使用,不常用
处理请求参数
当客户端打开浏览器要访问服务器时,可能会带着一些http请求参数过来.
这时,服务器需要获取http参数进行业务处理,如何处理http请求并获取参数呢?
总共有8种,重点时两种方式:GET方式和POST方式.
GET方式
向特定的资源发出请求,并返回实体.有固定的写法.而且数据有最大长度,超出就不行
例如:
http://localhost:8080/car/insert?id=1&name=张三&age=18
POST方式
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
RESTFul方式(推荐)
为了简化GET请求的写法,可以使用RESTFul方式,用法:
1、需要使用注解@PathVariable来获取请求路径中的参数值,@PathVariable用来绑定值
2、通过{???}获取路径中传递来的值
3、以前GET的访问方式即将被简化成:
http://localhost:8080/car/insert/1/张三/18