秋招准备-后台框架-Spring

Spring

 

  • 核心概念

1.什么是IoC

    IoC(Invertion of Control),控制反转,解耦合,轻量级。

    具体上可以说,以前我们通过在程序里主动创建对象实例实现组件间的依赖关系,会造成组件间互相耦合。

    而IoC将实现组件关系交由外部容器来管理,即由容器在运行期将组件间的某种依赖关系动态注入到组件中。

    通俗来讲,以前我们要一个什么东西,完全要自己造,要原料,要方法,要实际操作等等。而现在,则是我们提出要一个东西,然后IoC的容器就给我们直接送过来了。

 

2.什么是DI

    DI(Dependency Injection),依赖注入,即将服务注入到使用它的地方。对象只提供普通的方法让容器去决定依赖关系。

    容器全权负责组建的装配,它会把符合依赖关系的对象通过属性(setter()),或是构造器传递给需要的对象。

 

3.什么是Bean

    pojo和JavaBean有相同有不同:

    1.pojo(plain old java object):

    pojo是一个简单的、普通的Java对象它包含业务逻辑处理货持久化逻辑等,但不是JavaBean,不具有任何特殊角色,不继承或不实现任何其他Java框架的类或接口。

    pojo可以认为是一个中间对象,可以转化为PO、DTO、VO

    2.JavaBean

    JavaBean是一个遵循特定写法的Java类,是一种Java语言编写的可重用组件,它的方法命名,构造及行为必须符合特定的约定:

    <1>这个类必须具有一个公共的(public)无参构造函数;
    <2>所有属性私有化(private);
    <3>私有化的属性必须通过public类型的方法(getter和setter)暴露给其他程序,并且方法的命名也必须遵循一定的命名规范。 
    <4>这个类应是可序列化的。(比如可以实现Serializable 接口,用于实现bean的持久性)

    JavaBean在Java EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象(内省机制),并且通过反射那些遵循命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。

    3.Bean 

    即豆子,含义是可重用Java组件,所谓组件就是一个由可以自行进行内部管理的一个或几个类所组成、外界不了解其内部信息和运行方式的群体。使用它的对象只能通过接口来操作。

 

 

  • 常用对象

1.ApplicationContext

    取得方式

    1.本地文件    2.ClassPath    3.Web应用中依赖servlet或Listener

    2.如下,返回一个ApplicationContext对象

    new ClassPathXmlApplicationContext(
                new String[] { "applicationContext.xml" }    )

    然后可以通过context对象的getBean("id")取得bean对象。

2.BeanFactory

 

 

 

  • Bean

1.通过xml文件注册,注入值和对象。

<bean name="id" class="全限名">
    <property name="属性" value="值" />
    <property name="属性" ref="beanId" />
</bean>

通过在xml中写入<bean>,完成对该pojo的注册,当IoC容器加载的时候,会将Bean实例化,然后到使用的时候,再通过容器的方法来获得Bean的实例对象。

id唯一标识这个bean对象,class是pojo类的全限名。
在<property>中的name中填入pojo类的属性名,value后跟相应的值。
如果是注入对象的话,则用ref,后跟对象对应类型的Bean的Id。

 

2.注入值的对象,可以分设值注入与构造器注入。

    设值注入如下

.xml
<bean name="L" class="Bean">
    <property name="name" value="Lin">
</bean>

pojo
class Bean
{
    String name;
    public void setName(String name)
    {    this.name=name;    }
}

    构造器注入如下

.xml
<bean name="id" class="全限名">
    <constructor name="name" value="Lin">
</bean>

pojo
class Bean
{
    String name;
    public Bean(String name);
    {    this.name=name;    }
}

    不管是设值注入还是构造器注入,在xml设值属性的name那里,都应该与实际pojo类的属性名一致,不然会注入失败。

 

3.注解注入

    先说两个配置:

    <context:annotation-config/>(.xml中)--设置后,IoC容器能够识别在pojo类的成员变量和成员方法上的注解。

  <context:component-scan base-package=".pojo'/>--设置后,能够自动扫描该包下的所有pojo类,被@Component、@Service、@Repository、@Controller注解的bean,会在IoC容器启动时,加载到容器中。同时也包括上一个标签的功能。

    1.再说注解,@Component、@Service、@Repository、@Controller注解在一个类前,表示该类是一个Bean,在被IoC容器扫描的范围,就会被自动加载成Bean放进容器里进行管理。

    @Component是通用的注解,而剩下三个则一般用来强调Bean的功能性,便于分清层次。

    @Repository一般用于Dao层的Bean

    @Service用于事务层的Bean

    @Controller用于控制层的Bean

    用上述注解标记一个类后,可以在后面追加Bean的id属性,如果不加的话,会按默认方式设置该Bean的id。如:

对于类MyInformation,自主设置id和默认设置id,及取得bean的方式
@Repository("lin")
class MyInformation{}
//通过context取得bean
context.getBean("lin");

@Repository
class MyInformation
//通过context取得bean
context.getBean("myInformation");
及默认会将该类的类名,首字母小写后,设为bean的id。

 

    2.对于完成了注册的Bean来说(xml或注解),可以通过注解自动装载Bean属性。

    自动装载常用的是三种方式。

    在<beans>中,加入一个属性default-autowire="值",值可以是<1>byName <2>byType <3>constructor。

    <1>当设置default-autowire为byName时,对象注入不需要再写<bean>下的<property name="" ref="">,也不需要别的注解。当注册完Bean后,如果该Bean有依赖的类,就会根据其属性名,作为id,去IoC容器中寻找与其匹配的Bean,如果找得则注入。

    <2>设置为byType时,如果有依赖类,则是根据该类的类型,去容器里搜索,如果有多个结果会报错,如果单个结果,则按该结果完成对象注入。

    <3>和<2>类似,都是按照类从容器中匹配的,只是是按值注入和构造器注入的区别。

    而@Autowired则是按照类型来进行自动装载的。

    当@Autowired标记某个成员变量或者setter()方法时,会在容器中根据该变量类型去找匹配Bean,找得即注入。

    搭配使用:

 

@Required

@Qualifier

@Resource

@Order

@Scope

 

装载List和Map对象

 

@Configuration

@Bean

@ImportResource

@Value

 

bean的生命周期和作用域

-----7.22未完

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值