J2EE
Java web
Servlet
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:
- 性能明显更好。
- Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
- Servlet 是独立于平台的,因为它们是用 Java 编写的。
- 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
- Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
My Batis
- SqlSessionFactoryBuilder(构造器),他会根据配置或者代码来生成SqlSessionFactory,采用的是分布构建的Builder模式。
- SqlSessionFactory(工厂接口):依靠他来生成SqlSession,使用的是工厂模式。
- SqlSession(会话):一个即可以发送SQL执行返回结果,也可以获取Mapper的接口。在现有的技术中,一本我们会让其在业务逻辑代码中“消失”,而使用的是MyBatis提供的SQL Mapper接口编程技术,他们提高代码的可读性和可维护性。
- SQL Mapper(映射器):MyBatis新设计存在的组件,它由一个Java接口和xml文件(或注解)构成,需要给出对应的SQL和映射规则。
Spring
IOC
- InVersion of Control(控制反转)
DI
- Dependency Injection(依赖注入)
AOP
+ Aspect Oriented Programming(面向切面编程)
注解
-
@Component注解,用到这个类的时候不需要new。在需要用创建该对象的类添加@ComponentScan
//MessageService类 @Component public class MessageService { public MessageService() { super(); System.out.println("MessageServeice"); } public String getMessage(){ return "Hello world"; } } //MessagePrintf类 @Component public class MessagePrintf { public MessagePrintf() { super(); System.out.println("MessagePrintf"); } // 以下两段代码表示MessagePrintf类与MessageService类创建关联 MessageService messageService; //Autowired注解表示在Spring容器创建的时候会自动调用 @Autowired public void setMessageService(MessageService messageService) { this.messageService = messageService; } public void printfMessage(){ System.out.print(this.messageService.getMessage()); } } //在调用类使用@ComponentScan,并使用 ApplicationContext context = new AnnotationConfigApplicationContext(Application.class)初始化,会自动调用标有注解@Component类的构造函数,相当于自动new一个对象 @ComponentScan public class Application { public static void main(String[] args){ //初始化Spring容器 //会自动调用标有注解@Component类的构造函数 ApplicationContext context = new AnnotationConfigApplicationContext(Application.class); //MessageService类和setMessageService都交由Spring管理,在初始化的时候会自动执行标有注解的代码 MessagePrintf printf = context.getBean(MessagePrintf.class); printf.printfMessage(); } }
log4j模块
- 在pom添加依赖
- 在resource目录新建log4j.properties文件,网上复制模板,填写到该文件中
junit 、 spring-test单元测试
- maven:junit、spring-test;(引入依赖)
- @RunWith(SpringJUnit4ClassRunner.class)
- 加载配置类@ContextConfiguration(classes=Appconfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=Appconfig.class)
public class AppTest {
@Autowired
private CDplayer player;
@Test
public void testPlay(){
player.playCD();
}
}
@Autowired注解(自动执行)
- 用在构造函数上(多个依赖的情况)效率高
- 用在成员变量上 (利用反射,效率低)
- 用在setter方法上
- 用在任意方法上
- 属性required
- 当@Autowired(required=false)时,该组件@Component注解可有可无。但要注意使用该对象是要进行非空判断
装配bean的三种方式
- 在xml中进行显示的配置
- 在Java中进行显示的配置
- 隐式的bean发现机制和自动装配
接口编程
//定义一个service接口
public interface UserService {
void add();
void update();
//...
}
//创建一个实现类
@Component
public class UserServiceNormal implements UserService {
public void add() {
System.out.println("添加用户成功");
}
public void update(){
}
}
//测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class AppTest {
@Autowired
private UserService userService;
@Test
public void addNormalUser(){
userServiceNormal.add();//输出添加用户成功
}
}
-
自动装配的歧义性
-
使用首选bean(在定义类时使用注解@Primary),这样解耦性不高
-
使用限定符:在定义类时使用注解@Qualifier(“Super”)/@Qualifier(“Super”)。在使用时想要只需要在定义字段时使用@ Qualifier("")对应注解即可。
//如:实现类1 @Component @Qualifier("Normal") public class UserServiceNormal implements UserService { public void add() { System.out.println("添加用户成功"); } } //实现类2 @Qualifier("Super") public class UserServiceTest implements UserService { public void add() { System.out.println("添加超级用户成功"); } } //测试类 @Autowired @Qualifier("Super") private UserService userService; @Autowired @Qualifier("Normal") private UserService userService1; @Test public void addSuperUser(){ userService.add();//添加超级用户成功 } public void addSuperUser1(){ userService.add();//添加用户成功 }
-
使用限定符和类id
-