1. 依赖注入
1.1 引用类型
注入引用类型
一种是默认按照类型装配
一种是如果有相同类型的bean采用按bean名称装配
但是在写的过程中@Qualifier
前面必须写上@Autowired
也就是必须依赖@Autowired
//@Autowired:注入引用类型,自动装配模式,默认按类型装配
@Autowired
//@Qualifier:自动装配bean时按bean名称装配
@Qualifier("bookDao")
private BookDao bookDao;
1.2 简单(基本)类型
当注入的来自外部文件properties时,需要在Java配置文件中加入
这里的引入properties文件不能采用*,不允许通配符
如@PropertySource({"*.properties"})
//@PropertySource加载properties配置文件
@PropertySource({"jdbc.properties"})
直接改成$占位符
//@Value:注入简单类型(无需提供set方法)
@Value("${name}")
private String name;
1.3 暴力反射
这里解释一下暴力反射
暴力反射(也称为非安全反射)是一种通过反射机制可以访问和修改类的私有成员的技术。当应用程序设计者定义一个类时,可以使用private或protected关键字限制该类的方法或变量只能在该类本身中被访问和修改,而外部程序则无法直接访问或修改它们。然而,通过使用反射API,可以在程序运行时绕过这种保护机制,访问和修改私有成员。
在Java中,通过设置AccessibleObject.setAccessible(boolean
flag)方法实现暴力反射。这个方法可以访问和修改一个类的protected和private方法和成员变量,同时也可以访问和修改一个数组的元素。当flag设置为true时,表示反射对象在使用时取消Java语言访问检查,从而访问和修改保护成员。
下面是一个简单的示例代码,展示了如何通过暴力反射获取并修改一个类的私有变量:
public class MyClass {
private String myPrivateField = "private field value";
}
public class Main {
public static void main(String[] args) throws Exception {
MyClass obj = new MyClass();
Field field = MyClass.class.getDeclaredField("myPrivateField");
field.setAccessible(true);
System.out.println(field.get(obj)); // 输出"private field value"
field.set(obj, "new private field value");
System.out.println(field.get(obj)); // 输出"new private field value"
}
}
上述代码中,使用反射API获取了 MyClass 类的 myPrivateField 字段,并使用 setAccessible()
方法将其设置可访问标志(取消访问检查),然后通过该方法修改了私有变量的值。需要注意的是,暴力反射可能会破坏程序的封装机制,因此在使用时需要谨慎。