xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
[](https://gitee.com/vip204888/java-p7)注解开发
===================================================================
> ### [](https://gitee.com/vip204888/java-p7)**Bean的实现**
**1、 配置扫描哪些包下的注解**
[领取资料](https://gitee.com/vip204888/java-p7)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--指定注解扫描包-->
<context:component-scan base-package="com.study"/>
<!--开启注解的支持-->
<context:annotation-config></context:annotation-config>
**2、在指定包下编写类,增加注解**
@Component(“user”)
// 相当于配置文件中
public class User {
public String name = "张三";//加群1025684353一起吹水聊天
}
**3、测试**
[领取资料](https://gitee.com/vip204888/java-p7)
@Test
public void test(){
ApplicationContext applicationContext =new ClassPathXmlApplicationContext(“beans.xml”);
User user = applicationContext.getBean(“user”,User.class);
System.out.println(user.name);
> ### [](https://gitee.com/vip204888/java-p7)**属性注入**
**1、可以不用提供set方法,直接在直接名上添加@value(“值”)**
// 相当于配置文件中
@Component(“user”)
public class User {
@Value("张三")
// 相当于配置文件中 <property name="name" value="张三"/>
public String name;//加群1025684353一起吹水聊天
}
**2、如果提供了set方法,在set方法上添加@value(“值”);**
@Component(“user”)
public class User {
public String name;
@Value("张三")
public void setName(String name) {
this.name = name;
}
}
> ### [](https://gitee.com/vip204888/java-p7)**衍生注解**
[领取资料](https://gitee.com/vip204888/java-p7)
**@Component三个衍生注解
为了更好的进行分层,Spring可以使用其它三个注解,功能一样,目前使用哪一个功能都一样。
@Controller:web层(控制层)
@Service:service层(服务层)
@Repository:dao层(数据访问层)**
@Component //将这个类标注为Spring的一个组件,放到容器中!
public class Dog {
public String name = "dog";
}//加群1025684353一起吹水聊天
> ### [](https://gitee.com/vip204888/java-p7)**作用域**
**@scope**
* **singleton:默认的,Spring会采用单例模式创建这个对象。关闭工厂 ,所有的对象都会销毁。**
* **prototype:多例模式。关闭工厂 ,所有的对象不会销毁。内部的垃圾回收机制会回收**
@Controller(“user”)
@Scope(“prototype”)
public class User {
@Value("张三")
public String name;//加群1025684353一起吹水聊天
}
> ### [](https://gitee.com/vip204888/java-p7)**基于Java类进行配置**
[领取资料](https://gitee.com/vip204888/java-p7)
@Configuration //代表这是一个配置类
@Import(MyConfig2.class) //导入合并其他配置类,类似于配置文件中的inculde标签
public class MyConfig {
@Bean //通过方法注册一个bean,这里的返回值就Bean的类型,方法名就是bean的id!
public Dog dog(){
return new Dog();//加群1025684353一起吹水聊天
}
}
[](https://gitee.com/vip204888/java-p7)AOP
==================================================================
**AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。**
[领取资料](https://gitee.com/vip204888/java-p7)
| 通知类型 | 连接点 | 实现接口 |
| --- | --- | --- |
| 前置通知 | 在方法执行前执行 | org.spirngframework.aop.MethodBeforeAdvice |
| 后置通知 | 在方法执行后执行 | org.springframework.aop.AfterReturningAdvice |
| 环绕通知 | 在方法执行前后都执行 | org.aopalliance.intercept.MethodInterceptor |
| 异常抛出通知 | 在方法抛出异常后执行 | org.springframework.aop.ThrowsAdvice |
| 引介通知 | 在目标类中添加一些新的方法和属性 | org.springframework.aop.IntroductionInterceptor |
> ### [](https://gitee.com/vip204888/java-p7)**使用Spring实现Aop**
**导入依赖**
org.aspectj
aspectjweaver
1.9.6
> ### [](https://gitee.com/vip204888/java-p7)**第一种实现方式:**
**1、编写接口**
[领取资料](https://gitee.com/vip204888/java-p7)
package com.sutdy.service;
public interface UserService {
public void add();
public void delete();
public void update();//加群1025684353一起吹水聊天
public void select();
}
**2、编写接口实现类**
package com.study.service;
public class UserServiceImpl implements UserService{
@Override
public void add() {
System.out.println("增加了一个用户");
}
@Override
public void delete() {
System.out.println("删除了一个用户");
}
@Override
public void update() {
System.out.println("更新了一个用户");
}//加群1025684353一起吹水聊天
@Override
public void select() {
System.out.println("查询了一个用户");
}
}
**3、编写增强类**
**前置增强:**
package com.study.log;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
//方法执行前执行该类
public class BeforeLog implements MethodBeforeAdvice {
//method:要执行的目标方法
//objects:参数
//o:目标对象
@Override
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println(o.getClass().getName()+"的"+method.getName()+"被执行了");
}//加群1025684353一起吹水聊天
}
**后置增强:**
package com.study.log;
import org.springframework.aop.AfterReturningAdvice;
import java.lang.reflect.Method;
//方法执行后执行该类
public class AfterLog implements AfterReturningAdvice {
//returnValue 返回值
//method被调用的方法
//args 被调用的方法的对象的参数
//target 被调用的目标对象
@Override
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("执行了"+method.getName()+"方法,返回结果为:"+returnValue);//加群1025684353一起吹水聊天
}
}
**4、编写配置文件:**
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
最后我们该如何学习?
1、看视频进行系统学习
这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:
2、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
Spring源码深度解析:
Mybatis 3源码深度解析:
Redis学习笔记:
Spring Boot核心技术-笔记:
3、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。
人生短暂,别稀里糊涂的活一辈子,不要将就。
资料领取方式:点击蓝色传送门免费领取上述资料
文章内容中涉及到的Java面试题、源码文档,技术笔记等学习资料,均可以免费分享给大家学习,只需你动动手多多支持即可!
链图片转存中…(img-mrggDZgE-1628437377521)]
Redis学习笔记:
[外链图片转存中…(img-CGBiENwF-1628437377522)]
Spring Boot核心技术-笔记:
[外链图片转存中…(img-t2RkAvmX-1628437377524)]
3、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
[外链图片转存中…(img-iwh5LuSn-1628437377525)]
只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。
人生短暂,别稀里糊涂的活一辈子,不要将就。
资料领取方式:点击蓝色传送门免费领取上述资料
文章内容中涉及到的Java面试题、源码文档,技术笔记等学习资料,均可以免费分享给大家学习,只需你动动手多多支持即可!