Springboot与SpringCloud
前者进行模块的开发与构建,后者实现模块之间的联系与通信。
IOC
传统的编程中,我们new出一个实例,那么这种带代码在后期如果需求发生了改变,我们需要对代码进行实时的调整。 而通过向函数传入一个类的方式,程序不再具有主动性,变成了被动的接收对象。
Bean
构建类 -> xml配置Bean -> 程序调用xml文件中。
这个流程就像是我们创建了一个东西,把它放在了Bean这个碗里,每当我们需要用的时候就从碗里拿。
在基本的类中,要有GET与SET方法,Bean会使用Set方法进行属性的赋值,我们也就吧这个东西叫做注入。
依赖注入
- 依赖:指Bean对象的创建依赖于容器,Bean对象的依赖资源。
- 注入:指Bean对象那个所依赖的资源,由容器来设置和装配。
注入有很多种方法:
- 构造器注入 就是通过构造器关键字来
- Set注入
<bean id="hello" class="com.kuang.pojo.Hello">
<property name="str" value="Spring"/>
</bean>
<bean id="address" class="com.kuang.pojo.Address"></bean>
<bean id="student" class="com.kuang.pojo.Student">
<!--第一种普通值注入,value-->
<property name="name" value="fuck"/>
<!--第二种bean注入,ref-->
<property name="address" ref="address"/>
<!--第三种数组注入,ref-->
<property name="books">
<array>
<value>红楼梦</value>
<value>西游记</value>
<value>三国</value>
</array>
</property>
<!--第四种List注入,ref-->
<property name="hobbys">
<list>
<value>红楼梦</value>
<value>西游记</value>
<value>三国</value>
</list>
</property>
<!--第五种Map注入,ref-->
<property name="card">
<map>
<entry key="身份证" value="101010101010101111"/>
</map>
</property>
<property name="games">
<set>
<value>LOL</value>
<value>LOA</value>
<value>LOB</value>
</set>
</property>
<property name="wife">
<null></null>
</property>
<property name="info">
<props>
<prop key="driver">2019112222</prop>
<prop key="username">小明</prop>
</props>
</property>
</bean>
- 命名空间注入
<!--p空间注入,其实就是property的缩写,简易一些-->
<bean id="user" class="com.kuang.pojo.User" p:name="小王" p:age="19"/>
<!--c空间注入,构造器注入,简易一些-->
<bean id="user2" class="com.kuang.pojo.User" c:age="18" c:name="小王2" />
自动装配
byName : 会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid
byType : 会自动在容器上下文中查找,和自己对象属性类型相同的bean,Type的方法的好处就是可以不用写id,减少了一定的代码量。
同样byType会对bean的属性类型数量做出限制,每种属性类型只允许存在一个。
<bean id="people" class="..." autowire="byType">
- byname的时候,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致
- bytype的时候,需要抱枕所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致
使用注解实现自动装配
@Autowired就是用来实现这个东西的,和上一小节提供的autowire是一个作用,并且添加了 @Autowired之后也不必再写SET方法,当然命名要符合ByName或者ByType规范,这样xml文件才有迹可循。
//如果显示定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空。
@Autowired(required = false)
一些注解
@Component: 等价于<bean id="..." class="..."/> 把这个注解放在类上面,相当于是帮助我们编写了bean,相当于这个类被spring管理了。
@Value:对类的属性进行赋值。
@Configuration:上一层也是 @Component,也就意味着它也会被Spring容器托管,注册到容器中。这个注解代表当前的类是一个配置类,就是之前看的beans.xml