发表于: 2019-11-09 21:40:54
1 1070
今天完成的事情:重装系统了 重写Mybatis和spring,spring和Mybatis的整合
Mybatis
spring和mybatis整合
@RunWith
(SpringJUnit4ClassRunner.
class
)
@ContextConfiguration
(
"classpath:applicationContext.xml"
)
public
class
MybatisTest {
@Autowired
private
CategoryMapper categoryMapper;
@Test
public
void
testAdd() {
Category category =
new
Category();
category.setName(
"new Category"
);
categoryMapper.add(category);
}
@Test
public
void
testList() {
System.out.println(categoryMapper);
List<Category> cs=categoryMapper.list();
for
(Category c : cs) {
System.out.println(c.getName());
}
}
spring
public class HelloSpringTset {
public static void main(String[] args) {
//通过反射以classpath路径下的“spring-config.xml”创建"ApplicationContext"实例
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//在Bean工厂获取id为helloBean的类
HelloSpring hellospring = (HelloSpring) context.getBean("helloBean");
//调用方法,bean工厂会将参数赋值给方法
hellospring.printHello();
}
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
Customer customer = (Customer) context.getBean("customer");
System.out.println(customer.toString());
}
明天计划的事情:整理一下这两个框架 云服务器的环境配置 跑通MAIN方法
遇到的问题:Test没有写在SRC下
SqlSessionFactoryBuilder().build(inputStream);
报错 原因路径写错了所以没法获取到这个实例对象
收获:复习了一遍Mybatis和Spring 反射有点懵 回去复习了一下反射
总结一下反射
1.什么时候加载类(类的加载时机)?
当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。
(1)创建类的实例
(2)访问类的静态变量,或者为静态变量赋值
(3)调用类的静态方法
(4)使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
(5)初始化某个类的子类
(6)直接使用java.exe命令来运行某个主类
2.类加载器的分类?
(1)Bootstrap ClassLoader 根类加载器
* 也被称为引导类加载器,负责Java核心类的加载
* 比如System,String等。在JDK中JRE的lib目录下rt.jar文件中
(2)Extension ClassLoader 扩展类加载器
* 负责JRE的扩展目录中jar包的加载。
* 在JDK中JRE的lib目录下ext目录
(3)Sysetm ClassLoader 系统类加载器
* 负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径
3.获取字节码对象的三种方式?
(1)Object类的getClass()方法,判断两个对象是否是同一个字节码文件
(2)静态属性class,锁对象
(3)Class类中静态方法forName(),读取配置文件
4.反射中所用到的方法?
(1)构造方法
|--获取:getConstructor()和getConstructors()
|--执行:newInstance()
(2)普通的成员方法
|--获取:getMethod()和getMethods()
|--执行:invoke()
(3)成员变量
|--非私有:getField()和getFields()
|--私有:getDeclaredField
|--访问私有的成员变量先执行:setAccessible(true),然后执行set方法
5.泛型的擦除?
泛型只在编译期有效,在运行期会被擦除掉,生成.class文件之后泛型就没有了
6.暴力反射?
可以获取字节码对象中的所有属性和方法,包括私有.对于私有的属性和方法要使用暴力反射,即使用getDeclaredXxx()方法获取,
然后再设置可以访问,即调用setAccessible(true)
其他顺路补充
.JDK1.8的新特性?
(1)接口中可以定义有方法体的方法,如果是非静态,必须用default修饰
(2)如果是静态的就不用了
.网络编程的三要素?
(1)IP地址
(2)端口号
(3)协议
10.UDP和TCP的区别?
(1)UDP:面向无连接,数据不安全,速度快。不区分客户端与服务端。
(2)TCP:面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
(3)三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据
评论