大家好,又见面了,我是你们的朋友全栈君。
Spring入门:https://blog.csdn.net/qq_40323256/article/details/89738330
Spring中的动态代理和aop的自定义通知:https://blog.csdn.net/qq_40323256/article/details/89754201
SpringMVC入门:https://blog.csdn.net/qq_40323256/article/details/89784956
mybatis入门(实现增删改查):https://blog.csdn.net/qq_40323256/article/details/89704582
Mapper动态代理:https://blog.csdn.net/qq_40323256/article/details/89715484
ssm中直接返回某个页面或存东西:https://blog.csdn.net/qq_40323256/article/details/91511256
2019java后端面试集合篇最值得收藏的:
@Controller:@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。
@RequestMapping :@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。用于方法上,方法的返回值会通过视图解析器解析为实际的物理视图。
@RequestParam:@RequestParam用于将请求参数区数据映射到功能处理方法的参数上,用例:
@Resource和@Autowired:都是做bean的注入时使用
共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
不同点:
@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:
public class HelloWorld{
@Autowired
@Qualifier("userDao")
private UserDao userDao;
}
@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
注意:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。
IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是 依赖注入 (DI)
DI:依赖注入,将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系,调用setter方法来注入(反射的话太消耗性能)。他们的依赖关系只在使用的时候才建立。简单来说就是不需要总是NEW一个对象了,只需要一个或多个对象(由你定义的策略决定,一般是单例),统一由容器进行管理。
AOP:面向切面,是一种编程思想,是对OOP面向对象的补充和完善。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。 实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行(jdk动态代理:必须至少实现一个接口,底层利用反射机制,效率较低;cglib动态代理:原理是使用ASM字节码技术对指定的业务类生成一个子类,并覆盖业务方法实现代理,采用继承的方式,所以不能对final修改的类进行代理);二是采用静态代理的方式,在代码中显示地实现一个业务实现类的指定代理,在代理类中对同名的业务方法进行包装(不修改原有的业务代码),用户通过代理类调用被包装过的业务方法,但会导致代码冗余。目前这几种代理方式并没有高低之分,只是应用的场景不同。
Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。 AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便。
常用的注入方式主要有三种:构造方法注入,setter注入,接口注入。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149350.html原文链接:https://javaforall.cn