初学Spring(春天)<2>

 

配置方式2:基于注解配置

                1、xml+注解配置  (第1步:在xml中开启注解配置)

初学Spring(春天)<2>

 

 

 

 

注意:这里需要额外导入spring-aop的jar包

初学Spring(春天)<2>

 

 

 

 

@Component

被标示类会被纳入spring ioc容器进行管理,相当于<bean>

@Value

为spring中所有管理的该类对象注入基本类型和String属性值

@Autowired

为spring中所有管理的该类对象注入引用类型属性值;默认按类型注入,可以通过@Qualifier("dog2")指定注入哪个bean,同时也可以通过bean加入 primary="true" 优先被Autowired注入

@Resource

默认按类型注入,如果指定了name属性,则按bean名称注入

 

 初学Spring(春天)<2>

 

 

 

 

                2、java配置+注解配置 (第1步:在配置类中开启注解扫描)

@ComponentScan("com.cc.config")

会去com.cc.config扫描@Component @Value @Autowired进行创建bean或注入属性值

 初学Spring(春天)<2>

 

 

 

 

 配置方式3:基于java的配置(主流)

                注意:需要再多导入一个包spring-aop-5.0.14.RELEASE.jar

                 1)AnnotationConfigApplicationContext

@Configuration

指定该类为spring ioc容器配置类,相当于beans.xml文件

@Bean(name="user")

将方法返回值纳入到spring ioc容器进行管理,相当于 <bean>

 

                        

                       

                

         【注意】spring bean的底层就是用的反射技术来实例化bean

            

  总结:IOC是一种思想,为了减轻程序员自己new对象工作同时更好的管理bean的依赖,实现IOC方式,第1是自己工厂类(使用工厂模式)  第2是自己使用spring 的bean工厂。

 

 

 

 

1.1. 单例模式

单例模式:一个类永远只会实力化一个对象!!

任何对象都有一个 hashcode()方法 ,这个方法用来返回对象的hashcode码?

hashcode码就是对象在内存中地址的整数形式!!

 

单例模式实现方式:设计模式

1、懒汉式

2、饿汉式

3、多线程下的单例模式

 

初学Spring(春天)<2>

 

 

 

double check 保证单例模式在多线程下线程安全,同时解决每个线程都要获取一遍锁的开销

 

 4、问题:Student student = new Student();

    1.在内存中开辟空间

    2.初始化对象

    3.将对象地址赋值Student引用 student

    

    原子操作:要么同时成功 要么同时失败!!

    

    多线程下任然会有线程不安全问题,解决方案

 5、解决double check下的线程不安全问题

     double check + volatile关键字

 

     

6、优雅:用静态内部类的方式实现单例模式  Doug Lea

   

1.2. DI 依赖注入

  DI:dependency  Injection  依赖注入  (给类的属性注入值)

        1、set方法注入

        2、构造方法注入

3、接口注入(不常用)

① 根据参数名进行注入    与参数顺序无关,与构造方法定义的顺序有关

② 根据参数下标进行注入

 

1.3. Bean属性

① id/name      :               bean的唯一标示

                id是bean的唯一标示   

                id和name可以同时写; id是唯一标示 name别名

                name也是bean唯一标示

建议:一般建议使用id指定bean的唯一标示

②  class 类的全限定名

③ scope bean的作用域

singleton

(Default) Scopes a single bean definition to a single object instance for each Spring IoC container.

(默认)将单个 bean 定义范围到每个 Spring IoC 容器的单个对象实例。

prototype

Scopes a single bean definition to any number of object instances.

将单个 bean 定义范围到任何数量的对象实例。

request

Scopes a single bean definition to the lifecycle of a single HTTP request. That is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.

将单个 bean 定义范围到单个 HTTP 请求的生命周期。也就是说,每个 HTTP 请求都有自己的 bean 实例,该实例是在单个 bean 定义背面创建的。仅在 Web 感知 Spring 应用程序上下文的上下文中有效。

session

Scopes a single bean definition to the lifecycle of an HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.

将单个 bean 定义范围到 HTTP 会话的生命周期。仅在 Web 感知 Spring 应用程序上下文的上下文中有效。

application

Scopes a single bean definition to the lifecycle of a ServletContext. Only valid in the context of a web-aware Spring ApplicationContext.

将单个 bean 定义范围到 ServletContext 的生命周期。仅在 Web 感知 Spring 应用程序上下文的上下文中有效。

websocket

Scopes a single bean definition to the lifecycle of a WebSocket. Only valid in the context of a web-aware Spring ApplicationContext.

将单个 bean 定义范围到 WebSocket 的生命周期。仅在 Web 感知 Spring 应用程序上下文的上下文中有效。

上一篇:【转载】System_Verilog打印格式


下一篇:nw.js 命令行参数