spring学习记录

1.spring的IOC只能做一件事:解决程序依赖问题,解耦。 (编写程序时解耦,运行时还是耦合的。)

2.

Applicontext:只会创建一次所有的bean对象,即加载xml时全部创建,即每个类都只创建一个对象,后面每次获取相同类的对象时返回的都是同一个class对象。单例对象

BeanFactory:加载不创建,每次获取bean对象时创建对应的对象,即每个类的对象可以有多个,取决于获取次数。

3.spring注册bean时成员变量注入的方法:

                (1)  ①无参构造函数+setter方法,xml中配置为<property/>

                                 

                                 

                 ②有参构造方法,xml中配置为<constructor-arg/>

                                 

                                 

注:参数为基本变量类型一般用name="" value="";为其他类的对象则用ref=""

                           

                  (2)用某一个类的一个非静态方法获取对象,(可能该对象对应的class类得不到吧,所以只能用其他类的方法返回对象)

import *.*.Person;
public class PersonFactory{
    pbulic Person getPerson()
        {
            return new Person();
        }
}

此时xml的bean配置:①配置PersonFactory类的bean对象  ②配置根据PersonFactory对象的getPerson()方法得到的bean对象

<!-- 实例工程方法需要先创建工厂实例,然后在创建所需对象的时候,将其赋值为factory-bean -->
    <bean id="personFactory" class="com.learn.spring.factory.PersonFactory"></bean>
    <bean id="person" factory-bean="personFactory" factory-method="getPerson"></bean>

                   (3)用某一个类的静态方法获取对象,(静态方法可以直接用类名调用,因此不用讲factory配置为bean对象)

import *.*.Person;
public class PersonFactory{
    pbulic static Person getPerson()
        {
            return new Person();
        }
}

此时xml的bean配置:

 <bean id="person" class="com.learn.spring.factory.PersonStaticFactory" factory-method="getPerson"></bean>

注:第二、三种方法多用于将jar包中的类对象存入spring容器中。

第二、三中方法的参数怎么配置,若getPerson(String name){return new Person(name);}

getPerson(User user){return new Person(User);}

 

4.spring bean的作用域(想到maven的作用域)

        ①<scope></scope>     五种属性:Singleton(默认属性);prototype;request;session;Global Session(表示集群范围的bean,即所有服务器都用这一个bean对象)

5.bean声明周期:

        ① Singleton单例:                  ②prototype多例:

                                                 

5.spring基于注解配置bean及bean注入

           注解包括@Component,@Controller,@Service,@Reposity这四个等价属性包括value=""

                           @Autowired,@Qualifier,@Resource;使用方法见百度。。。。

spring学习中的问题记录:

       (1)  编写类时用的是编写接口加实现类方式,声明对象时:对象引用用接口类,对象用实现类;

                                

       (2)  自动配置bean对象的成员变量问题,因为是由spring配置的,因此获取对象要用applicationcontext的getBean()方法获取,否则用new获取则不会自动配置成员变量

                   

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-bean.xml");

        /**
         * serviceImpl ser = new serviceImpl();
         * 这样不会自动根据spring-bean.xml配置成员变量Dao。会产生NullPointerException(空指针异常,即Dao这个对象引用没有指向的对象)
         * 因此只能用getBean()方法获取对象,会自动配置返回对象的变量。
         */
IService service = applicationContext.getBean("service",serviceImpl.class);//new serviceImpl();

 

public class serviceImpl implements IService {
    private IDao dao;
    public void setDao(IDao dao) {
        this.dao = dao;
    }

这里我用的maven管理项目,sping+mybatis为一个基础maven项目,springmvc依赖此基础项目;

对基础项目:项目名为spring_Data,ID配置如下:

<groupId>org.example</groupId>
<artifactId>spring_Database</artifactId>
<version>1.0-SNAPSHOT</version>

然后在pom.xml所在文件夹执行cmd:mvn install将该项目导入本地maven仓库,就可以用来依赖并使用它了。

对springmvc项目,<springmvc.xml>配置依赖上面的spring+mybatis:

<dependency>
      <groupId>org.example</groupId>
      <artifactId>spring_Database</artifactId>
      <version>1.0-SNAPSHOT</version>
</dependency>

课程来源:Spring教程IDEA版,Bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值