Spring常用注解

使用注解之前要开启自动扫描功能:base-package伟需要扫面的包(含子包)
<context:component-scan base-package=“cn.test”/>

@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Lazy(true) 表示延迟初始化
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope用于指定scope作用域的(用在类上)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@DependsOn:定义Bean初始化及销毁时的顺序
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
@Autowired @Qualifier(“personDaoBean”) 存在多个实例配合使用

@PostConstruct 初始化注解
@PreDestroy 摧毁注解 默认 单例 启动就加载??
@Async异步方法调用,需要添加以下代码:

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10"/>
<property name="maxPoolSize" value="300"/>
</bean>

为了让@Async注解能够生效,还需要在Spring Boot的主程序中配置@EnableAsync

在Spring中,基于@Async标注的方法,称之为异步方法;

这些方法将在执行的时候,将会在独立的线程中被执行,

调用者无需等待它的完成,

即可继续其他的操作。

@Async所修饰的函数不要定义为static类型,这样异步调用不会生效

@ComponentScan(basePackages = “com.xzc.”):自动扫描组件 详情
@EnableAutoConfiguration:可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器 详情
@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
@PropertySource({“classpath:application.properties”, “classpath:xzc.properties”}):加载指定的属性文件 详情
@ImportResource(“classpath:ws-client.xml”):用于导入Spring的配置文件,让配置文件里面的内容生效 详情
@EnableRedisHttpSession:Sessionz存到redis中 详情
@EnableAspectJAutoProxy:AOP面向切面编程,生成目标方法所属类的代理类详情
@EnableCaching:实现缓存 详情
@EnableAsync:开始对异步任务的支持 详情
@Configuration:用于定义配置类 详情
@EnableScheduling 启动定时任务
@Entity注释指名这是一个实体Bean

=====================================================================
@SuppressWarnings:告诉编译器忽略指定的警告,不用在编译完成后出现警告信息 详情
@PathVariable :绑定它传过来的值到方法的参数上(someUrl/{paramId})
@Autowired :它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作
@Resource:@Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,而@Resource 默认按 byName 自动注入罢了

SpringBoot注解@ServletComponentScan和@ComponentScan

@ServletComponentScan

在SpringBootApplication上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。

  1. 在入口Application类上加入注解@ServletComponentScan
@Slf4j
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableTransactionManagement
@EnableEurekaClient
@EnableFeignClients
@ServletComponentScan(basePackages = {"cn.swifthealth.patient.config.datasource"})
public class PatientApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(PatientApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(PatientApplication.class, args);
    }
}

  1. 新建Servlet类,继承HttpServlet并且加入注解@WebServlet(name=“TestServlet”,urlPatterns="/test")列如druid数据库连接池
/**
 * 数据库监控
 * 注意访问地址:
 * http://[ip]:[port]/[context-path]/druid/index.html
 */
@WebServlet(name = "DruidServlet", urlPatterns = "/druid/*",
        initParams = {
                @WebInitParam(name = "loginUsername", value = "admin"),// 用户名
                @WebInitParam(name = "loginPassword", value = "admin"),// 密码
                @WebInitParam(name = "resetEnable", value = "false")// 禁用HTML页面上的“Reset All”功能
        })
public class DruidServlet extends StatViewServlet {

}

(1)如果不加@ServletComponentScan注解则会报404即找不到页面,控制台也扫描不到我们配置的servlet:/druid/inde.html,即无法被映射
(2)如果Application类和Servlet类不在同一包下,则@ServletComponentScan需要添加相应的路径,如Application类在包com.hui.xiao下,则写为@ServletComponentScan(“com.hui.xiao”)或@ServletComponentScan(“com.hui”)

@ComponentScan

1.@ComponentScan({“com.xiao.hui”,“com.xiao.qiang”})或@ComponentScan(basePackages = {“com.xiao.hui”,“com.xiao.qiang”})

2.@ComponentScan(“com.xiao”)或@ComponentScan(value = “com.xiao”)或@ComponentScan(basePackages = { “com.xiao” })

3.@ComponentScan(basePackageClasses=要扫描类.class所在位置的包) 意思是要扫描哪个类所在的包,如@ComponentScan(basePackageClasses=hehe.class),这种写法不如上面的那种写法好有局限性

Spring Boot项目(@ComponentScan)
总结:

1.SpringBoot在写启动类的时候如果不使用@ComponentScan指明对象扫描范围,默认指扫描当前启动类所在的包里的对象,如果你的其他包都在使用了@SpringBootApplication注解的主类所在的包及其下级包,则你什么都不用做,SpringBoot会自动帮你把其他包都扫描了。为了方便,我一般都把主类放在了所有类的上一级包中,如项目所有的class文件都放在了包com.beauty的下级包中,则把spring boot的主类放在包com.beauty下。

2.如果当前启动类没有包,则在启动时会报错:Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package错误,因为启动类不能直接放在main/java文件夹下,必须要建一个包把它放进去或者使用@ComponentScan指明要扫描的包。

3.如果你有一些bean所在的包,不在主类的包及其下级包,那么你需要手动加上@ComponentScan注解并指定那个bean所在的包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值