## Spring
. spring 的 IoC(控制反转) 就是一个工厂模式变种,<br/>
. spring 核心就是 IoC 容器, 实现这个容器的接口 BeanFactory,BeanFactory 是最核心的, 最纯粹的 < br/>
方法: <br/>
getBean() <br/>
实现类: <br/>
ApplicationContext <br/>
. 简单工厂
- public class ServiceFactory() {
- public Object getServiceObject(String name) {
- if("bs".equals(name)) {
- A a = new A();
- B b = new b();
- MyBatiscConnection conn = new MyBatiscConnection();
- BookService bookservice = new BookService();
- // 同通过 setter 的方式来确定他们的关系是如何的
- //B 对象包含 A 对象
- b.setA(a);
- //MyBatiscConnection 对象包 B 对象
- conn.setB(b);
- //**********__``````````__**********
- bookService.setConn(conn);
- log.setConn(conn);
- bookservice.setLogger(log);
- return bookService;
- }
- }
- }
- <li> 在调用的时候就变得了简单了 </li>
- public class Test () {
- public static void main(String[] arge) {
- ServiceFactory sf = new ServiceFactory();
- BookService bookservice = sf.getSerivceObject("bs");
- // 然后在调用 bookservice 的某个方法
- }
- }
- <li> 小结:</li>
我们在中间加了一层, 虽然不用在调用的时候, 创建很多的对象. 但在工厂模式中代码类增加了,
我们在维护的时变得困难了.
- <li>
- 所以后面出现了: xml 文件的形式来更清晰的描述, 类的创建和类与类之间的关系
- </li>
- <!-- 之前是命令的形式, xml 是描述的形式 -->
- <xml>
- <bean id="a" class="com.wgc.entity.A">
- </bean>
- <bean id="b" class="com.wgc.entity.B">
- <property name="a" ref="a" />
- </bean>
- <bean id="conn" class="org...MyBatiscConntion">
- <property name="b" ref="b" />
- </bean>
- <bean id="log" class="org...LogUitl">
- <property name="conn" ref="conn" />
- </bean>
- <bean id="bookService" class="com...BookService">
- <property name="conn" ref="conn" />
- <property name="log" ref="log" />
- </bean>
- </xml>
- <li>
- 结论
- </li>
使用 xml 的文件中 Bean 标签配置, 更加清晰的描述出类与类之间的关系.
<li > 门面模式:</li>
例子: 有一个工厂有很多的部门, 要买东西的时候我们不可能一个一个部门去卖, 所以把所以部门组合在一起, 在去卖.
spring 有三种方式描述
1,@Bean java 类方法 < br/>
2,<bean> xml<br/>
3, 开启扫描的模式
- @Component <br/>
- @ComponentScan(basePackages="learning.spring") <br/>
- @ImportResource(locations = "learning/spring/my-spring.xml") <br/>
- @Service <br/>
@Controller: 这个注解 @ControllerAdvice 只作用在加上 @Controller 的类上 < br/>
@Repository <br/>
4, 是 java 代码写 spring 的配置
要在类的头部加上 @Configuration 注解
@Configuration
如果要在 java 类上加这个注解就是相当 xml 文件中 < beans>
工厂模式与 IoC 的区别:
工厂模式在调用时才创建对象;<br/>
IoC 容器在启动就创建了所有的对象 (可以加属性 lazy-init="true": 意思是这个对象没有那么重要不着急创建),
还有所有的对象在刚刚开始都是单例模式创建了 (可以加 scope="prototype" 修改: 一般我们不会这么做, 因为每次都创建一个新的对象, 对内存的消耗是非常大的)
denpend-on 定义顺序 (属性)
parent 定义继承 (属性)
scope 定义初始化策略 (属性)
lazy 延迟初始化 (属性 lazy-init)
alias 定义别名 (标签)
import 引入其他的定义文件 (标签)
例子: <import resource="文件名"/>
<alias name="rabbits" alias="ADO"/>
或是 < alias name="ADO" alias="rabbits"/>
来源: http://www.bubuko.com/infodetail-2883478.html