spring
-
spring的两大特性 (IOC,DI),AOP
-
ioc: 首先,我们将自己new的方式,变为了像工厂里拿的方式,我们不需要知道我们要对哪个对象进行操作,因为那是有工厂来进行提供,它会在我们需要的时候给我们,private A a=new b()这不是,private A a; 这是,我们知道我们要哪种,但不具体知道是谁,那是有工厂来决定.
这是我们自己定义的工厂来进行获取,配置文件是propertis,没上传,就是一个id 和全路径类名
这个要看懂
2 下面在spring工厂来进行获取
上面的xmls那些要去对应的spring文件查找,粘贴过来,这里配置了两个bean对象,下面来进行获取
ApplicationContext 三个常用的实现类
ClassPathXmlApplicationContext:要求配置文件必须在类路径下
FileSystemXmlApplicaContext:它可以加载磁盘下任意位置配置文件(必须要有访问权限)
AnnotationConfigApplicationContext它用于读取注解创建容器的
ApplicationContext 接口是在加载配置文件就创建对象(适合创建单例,因为容器只创建一次)
BeanFactory却是我们在拿对象的时候创建,(适合创建多例,这个是拿一次创建一个)
-
创建对象的三种方法
-
1,构造方法创建对象,前提必须要有空参构造方法
2,通过方法创建对象,就是一个方法返回值是一个对象类型,返回体就是new’一个对象
3和第二个一样,但是它是静态方法,为什么第二个省略了一步,是因为静态方法不需要创建对象就可调用
对象的生命周期和范围
-
1单例是由容器创建,所以
DI 依赖注入
- 1,说白了,就是把原有的设置对象属性方式,变为了xml设置
- 2,包括有构造注入,set属性注入 DI 构造方法注入和属性注入和集合还有Properties对象注入注入依赖注入
- 把xml配置对象,和设置属性的方式,用注解来实现
-
这里标签方式不好写,写了会被隐藏,所以就写一半
1bean>@Component ------beanID是当前类名且首字母小写,由于Spring分为三层所以对应三层都有注解,@Controller–控制器 @Service–业务层@Repository-数据访问层,注解属性Value用来标识BeanId,默认是该类类名且首字母小写
注解 | 作用 |
---|---|
@Acope | 用来指定该对象的范围,singleton(单例),prototype(多例) |
@Autowired | 自动注入,先按照类型,如果有多个类型,则按BeanID注入 |
@Qualifier | 它必须和@AutoWired一起使用,在按照类注入的基础之上,在按照名称注入 |
@Reource | 它按照名称注入 |
@Value | 注入普通类型,和String类型 |
@PreDestroy | 修饰销毁方法 |
@PostConstruct | 修饰初始化方法 |
@Value | 注入普通类型,和String类型 |
@PreDestroy | 修饰销毁方法 |
接下来看一个案例,如何一步步的消除xml标签,下面是一个简单的两层,分别采用了xml的配置
这是第一种采用xml的方式配置
-
消除部分xmlBean的配置和依赖
-
1将自己的对象全部改为注解,数据访问层使用@Repository,业务逻辑层使用@Service,把业务逻辑层里的dao对象用@Autowired自动注入
我们就将xml全部消除,甚至可以删除该文件,效果一样,但是启动容器方式会发生变化
上面的QueryRunner配置还需加上一个@Scope注解且值为prototype,表明他是多例对象
一般我们自己的类,我们会去写注解Component,Controller…,来进行配置,但是导入的jar包里的类,你无法加注解,所以,就要采用配置类的方式来进行配置
注解 | 作用 |
---|---|
Configuration | 和bean.xml一样,这个注解修饰就是一个配置类,而bean.xml是配置文件,作用一样 |
Bean | 修饰方法,让该方法返回的对象放入容器中,BeanID是默认是该方法的返回值,当修饰的该方法有参数的时候,它会去容器中查找,查找方式和AutoWired一样 |
2:如果有多个配置类,那么该如何解决问题,我们可以直接写到AnnotationConfigApplicationContext(类名.class)中去,这样都会生效,但是这样做,会比较繁琐,这时候出现一个新注解,@import,我们可以吧它放在主配置类上,然后其余的就写在该注解里@import(类名.class…)一样可以生效
3如果一个方法配置,有两个方法提供,如下,那么我们可以加上@Qualifier注解来进行判断,为什么它这里可以单独使用那,因为方法参数那个位置,隐藏了一个@Autowired注解
3如果向上面那样配置,那么我们的数据库的配置,就被写死在代码中了
所以出现了,另一种方式
把配置文件写到类路径下,然后使用@Value注解加spring表达式来进行获取值
这时候,spring怎么知道我们的配置文件呢,所以出现了@PropertySource(“文件名字”)
-
如何选择
- 1,全xml方式,过于繁琐,全注解,好像也繁琐,个人认为注解加xml,最好 Authors
- John
- Luke