spring ioc(Inverse of Control)控制反转 和 di(dependency injection)
ioc:创建对象交给spring,业务层只关系业务即可。Ioc 的常见容器是:ApplicationContext 和 BeanFactory。ioc注解:@Component 注解(把资源让 spring 来管理。相当于在 xml 中配置一个 bean。value:指定 bean 的 id。 如果不指定 value 属性,默认 bean 的 id 是当前类的类名,首字母小写。@Controller:一般用于表现层的注解。@Service:一般用于业务层的注解。@Repository:一般用于持久层的注解。)
di:依赖注入。用到的时候注入。applicationContext.xml:构造函数注入和set注入。依赖注解:
@Autowired,按类型装配(byType)如果要允许 null 值,可以设置它的 required 属性为false,如:@Autowired(required=false)想使用名称装配可以结合 @Qualifier 注解进行使用
2)@Qualifier
- 在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。
- 它在给字段注入时不能独立使用,必须和 @Autowire 一起使用;但是给方法参数注入时,可以独立使用。
3)@Resource(推荐使用)
- 默认按照名称(byName)进行装配,名称可以通过 name 属性进行指定
- 这个注解属于 J2EE 的(推荐使用 @Resource 注解,因为这个注解是属于 J2EE 的,减少了与 Spring 的耦合。这样代码看起就比较优雅)
- 如果没有指定 name 属性,当注解写在字段上时,默认取字段名进行按照名称查找,当找不到与名称匹配的 bean 时才按照类型进行装配。
- 但是需要注意的是,如果 name 属性一旦指定,就只会按照名称进行装配。
4)@Value
相当于:<property name="" value="">
- 给基本类型和 String 类型注入值
- 可以使用占位符获取属性文件中的值。
@Value("${name}") //name 是 properties 文件中的 key
private String name;
5)@Scope
相当于:<bean id="" class="" scope="">
- 作用:指定 bean 的作用范围。
- 属性:value:指定范围的值。取值:singleton prototype request session globalsession
AOP(面向切面编程)是对oop(面向对象编程)的补充:你只要关系你的业务即可,其他的事交给其他人。比如权限认证、日志、事务处理。实现方式:
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建 “方面”,从而使得编译器可以在编译期间织入有关 “方面” 的代码。这里静态织入的原理就是在编译期间,切面直接以字节码形式编译到目标字节码中.
binlog:
mysql主备方案:
读写在主库,将数据实时同步给备库。
备份过程:数据>>>>master>>>>binlog>>>I/O thread>>>>slave>>>relaylog>>>>>sql thread。
1.在备库中执行change master 命令,绑定主库。
2、备库执行start slave,备库启动两个线程:i/o thread 和 sql thread。
3、主库数据变动写入binlog。
4、主库创建log dump 线程,通知slave数据有更新。
5、slave,向master节点的log dump线程请求一份指定binlog文件位置的副本,并将请求回来的binlog存到relay log中。
6、slave开启sql 线程读取relay log解析执行。
binlog三种模式:
row:记录table_map,writre_rows,deleter_rows
statement:记录sql语句
mixed:混合上面两种。