/**
* 模拟一个静态工厂,创建业务层实现类
*/
public class StaticFactory {
public static UserService createUserService(){
return new UserServiceImpl();
}
}
3. 实例工厂(了解)
/**
* 模拟一个实例工厂,创建业务层实现类
* 此工厂创建对象,必须现有工厂实例对象,再调用方法
*/
public class InstanceFactory {
public UserService createUserService(){
return new UserServiceImpl();
}
}
DI(依赖注入)介绍
一、介绍
什么是依赖? 依赖指的就是Bean实例中的属性 属性分为:简单类型(8种基本类型和String类型)的属性、POJO类型的属性、集合数组类型的属性。 什么是依赖注入? 依赖注入:Dependency Injection。它是 spring 框架核心 ioc 的具体实现。 为什么要进行依赖注入? 我们的程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况。 ioc 解耦只是降低他们的依赖关系,但不会消除。例如:我们的业务层仍会调用持久层的方法。那这种业务层和持久层的依赖关系,在使用 spring 之后,就让 spring 来维护了。 简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。
二、依赖注入的方式(基于XML)
1. 构造函数注入
顾名思义,就是使用类中的构造函数,给成员变量赋值。 注意,赋值的操作不是我们自己做的,而是通过配置的方式,让 spring 框架来为我们注入。 代码如下
public class UserServiceImpl implements UserService {
private int id;
private String name;
public UserServiceImpl(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public void saveUser() {
System.out.println("保存用户:id为" + id + ",name为" + name + " Service实现");
}
}
使用构造函数的方式,给 service 中的属性传值要求:类中需要提供一个对应参数列表的构造函数。 涉及的标签:constructor-arg
1. 步骤一:需要先引入 p 名称空间 * 在schema的名称空间中加入该行:xmlns:p="http://www.springframework.org/schema/p"
2. 步骤二:使用p名称空间的语法 * p:属性名 = "" * p:属性名-ref = ""
3. 步骤三:测试
三、依赖注入不同类型的属性(基于XML)
简单类型(value)
引用类型(ref)
ref就是reference的缩写,是引用的意思。
集合类型(数组)
1. 如果是数组或者List集合,注入配置文件的方式是一样的
//如果集合内是简单类型,使用value子标签,如果是POJO类型,则使用bean标签
美美小风
2. 如果是Set集合,注入的配置文件方式如下
哈哈呵呵
3. 如果是Map集合,注入的配置方式如下
4. 如果是Properties集合的方式,注入的配置如下
root123
IoC和DI基于注解使用
学习基于注解的 IoC 配置,大家脑海里首先得有一个认知,即注解配置和 xml 配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。 关于实际的开发中到底使用xml 还是注解,每家公司有着不同的使用习惯。所以这两种配置方式我们都需要掌握。 我们在讲解注解配置时,采用上一节的案例,把 spring 的 xml 配置内容改为使用注解逐步实现。
@Configuration
public class SpringConfiguration {
//spring容器初始化时,会调用配置类的无参构造函数
public SpringConfiguration(){
System.out.println(“容器启动初始化。。。”);
}
@Bean
@Scope(“prototype”)
public UserService userService(){
return new UserServiceImpl(1,“张三”);
}
}
@Configuration
@ComponentScan(basePackages = "com.spring")
@Import({JdbcConfig.class})
public class SpringConfiguration {
}
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
}
通过注解获取容器
Java应用(AnnotationConfigApplicationContext)
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
UserService service = context.getBean(UserService.class);
service.saveUser();
终端仿真器是一款用其它显示架构重现可视终端的计算机程序。换句话说就是终端仿真器能使哑终端看似像一台连接上了服务器的客户机。终端仿真器允许最终用户用文本用户界面和命令行来访问控制台和应用程序。(LCTT 译注:终端仿真器原意指对大型机-哑终端方式的模拟,不过在当今的 Linux 环境中,常指通过远程或本地方式连接的伪终端,俗称“终端”。)
你能从开源世界中找到大量的终端仿真器,它们
功能:在控制台每秒输出一次
代码:
package Main;
import javax.swing.Timer;
import java.awt.event.*;
public class T {
private static int count = 0;
public static void main(String[] args){
1,获取样式属性值
top 与顶部的距离
left 与左边的距离
right 与右边的距离
bottom 与下边的距离
zIndex 层叠层次
例子:获取左边的宽度,当css写在body标签中时
<div id="adver" style="position:absolute;top:50px;left:1000p
spring data jpa 支持以方法名进行查询/删除/统计。
查询的关键字为find
删除的关键字为delete/remove (>=1.7.x)
统计的关键字为count (>=1.7.x)
修改需要使用@Modifying注解
@Modifying
@Query("update User u set u.firstna
项目中controller的方法跳转的到ModelAndView类,一直很好奇spring怎么实现的?
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* yo
(1)npm是什么
npm is the package manager for node
官方网站:https://www.npmjs.com/
npm上有很多优秀的nodejs包,来解决常见的一些问题,比如用node-mysql,就可以方便通过nodejs链接到mysql,进行数据库的操作
在开发过程往往会需要用到其他的包,使用npm就可以下载这些包来供程序调用
&nb
Controller层的拦截器继承于HandlerInterceptorAdapter
HandlerInterceptorAdapter.java 1 public abstract class HandlerInterceptorAdapter implements HandlerIntercep