J2EE- 可以理解为一个平台,一种架构,一种体系,一种规范,具体可百度,类似为lnmp这种。
BEAN - 也叫java bean ,表示应用组件,在ioc中,可以理解为万物皆为bean
DI - 依赖注入
依赖注入可以带来松耦合,举例:在构造函数里,将需要注入到的对象传入,参数限定是这些对象需要
AOP - 面向切面,可以理解为各种bean包裹的外壳,距离如 常见的before after这种钩子,以前可能需要再代码中实现,而使用切面,这是按照配置来实现,也就是before 和after 并不知道它在那里被调用,被谁调用,而只有“装配者”才知道。
JNDI -java的命名目录,这是j2ee规范中的概念
EJB -企业级java bean ,也是j2ee规范中的概念
SpEl-Spring的表达式
@component:标记类为组件类,组件类会被spring自动配置为bean,如果需要指定bean的Id,则使用@component(”id名“),当然也可以采用@Name的(”id名“)来命名
@componentScan :启用组件扫描,默认扫描同包下的带有component注解的类,扫描包常用属性:value-指定扫描的包名,basePackages-使用数组的形式指定多个包名 ,basePackageClassess,指定扫描的类,这里有个经验:扫描的类可以是组件类,但更好的是接口类。通过标记接口的方式,可以保持对重构友好的接口引用,避免引用任何实际的应用程序代码,因为实际的代码很可能会在以后被删掉。
@autowired:自动装配,这个注解可以用在方法,构造器,属性上,个人理解:就是当有这个注解时,方法的入参如果有某个bean类型的,那么spring 就会自动完成依赖关系和装配关系。常用属性:required-如果没有匹配到相应的bean,是否抛出异常。这个是spring特有的注解,和java的@Inject 一样。
@configuration:javaConfig配置类。
@bean:在javaConfig配置类中使用此注解,告诉Spring,有这个注解的方法返回了一个bean对象,注解支持@bean(name="xxxID"),这里需要注意,spring会拦截所有其他的对含有此注解的调用,并且会直接返回一个该方法的bean,也就是说,带有bean的方法,只有spring会调用的时候,方法里的代码会生效,用户自己调用的话,会直接拿到一个对象。
@Profile:指定bean的环境,此注解可以单独的在类的上面,如果要在方法上面注解,那么需要和@bean一同使用,当有这个注解时,spring会根据profile中的环境是否激活来决定是否创建这个bean,如果没有指定profile的,始终会创建。
@Conditional 用到带有@Bean注解的方法上,如果给定的条件计算为true,则创建这个bean
@Primary :和@Component一同使用,表示有多个在一个接口下多个实现类都标记了@Component注解是,拥有@Primary注解的作为首选bean。
@Qualifier:限定符注解,一般再与@Autowired或者@Inject协同使用时,在注入的时候指定注入进去的是哪个bean;再和@Component或者@Bean协同使用的时候,表示自定义的限定符名称,也就是再调用处,如与@Autowired搭配时可以指定的名字,这样做的好处时,如果以后某个bean重构了,改名字了,只要@Qualfier里的名字没有改,代码就能正常,否则会抛异常,说找不到beanId。
@Scope:bean的作用域,spring默认时单例的,通过此注解可以更改bean的作用域,spring的作用域有:单例、原型(每次新建一个),会话,请求。此注解经常和@Cpmponent或者@Bean协同使用。
对于web中的会话场景,scope的赋值是@Scope(value=web Application Context。SCOPE_SESSION,proxyMode=Scope的Proxy Mode.INTERFACES).
关于proxyMode的个人理解:只要是bean,spring就会在启动的时候注入,但是当遇到这种类似session的bean,只有每个用户的请求真正进来了,才会有一个与这个用户相对应的会话匹配,所以这个时候就需要设置proxyMode,让spring在启动的时候注入的是一个代理,这样当用户的session存在的时候,程序运行调用方法的时候,spring通过proxMode的那个代理去实现相应的功能。
@PropertySource:注入外的值,格式(“classpaths:/com/xxx/xxx/app.properties”),常和@Configuration搭配
略